// Глобальные переменные и операции if (window.devicePixelRatio !== 1) { // Костыль для определения иных устройств, с коэффициентом отличным от 1 var dpt = window.devicePixelRatio; var widthM = window.screen.width * dpt; var widthH = window.screen.height * dpt; document.write(''); } // ОС 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; })); // Изменение в функционале ядра jQuery - Конец // Операции, требующие высокой скорости обработки !!! ---- // Если таблица больше ширины экрана, то включаем скролл var firstRun = true; $('#headcol-fix').parents('.c').sizeChanged(function(){ if (!firstRun) resizeFix(); }); resizeFix(); function resizeFix() { if ($('#headcol-fix').length > 0) { // Запас на отступы var delta = 25; var mainL = document.getElementById('main-layer').getBoundingClientRect(); var tableScr = document.getElementById('headcol-fix').getBoundingClientRect(); var over = tableScr.right - mainL.right + delta; // Нужная ширина таблицы var mustWidth = tableScr.width - over; $('#headcol-fix').width(mustWidth); $('.headcol-fix-shadow').height($('#headcol-fix').height()); // Если ячеек мало для заполнения таблицы var allThWidth = 0; var oneThWidth = 0; var allThCount = 0; var mustThWidth = 0; var firstThWidth = $('#headcol-fix').children('table').find('th').first().width(); var mustTh = $('#headcol-fix').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); }); } firstRun = false; } } // Операции, требующие высокой скорости обработки !!! - Конец ---- $(function(){ if (OSName == 'MacOS') $('body').append(""); // Чат $('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']); // Если в пути есть якорь, то скроллим страницу к этому тегу if (window.location.search.indexOf('ancor') >= 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 - указывается глобально в источнике вызова } // Пикеры даты и времени и прочее... $('.date').datepicker({ minDate: '0', beforeShow: function(input, obj) { $(input).after($(input).datepicker('widget')); }, onSelect : function(dateText, inst){ $(this).trigger('input'); // Триггер для выбора } }); $('.date1').datepicker({ beforeShow: function(input, obj) { $(input).after($(input).datepicker('widget')); setTimeout(function () { obj.dpDiv.css({ position: 'absolute', top: '100%', left: 0 }); }, 0); } }); $('.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(); // Иерархическое дерево $('.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() ); // Выделение пункта меню в зависимости от модуля if (typeof(module) == 'undefined' || module.length === 0) module = 'tasks'; $('[data-menu="'+module+'"]').children('.point').addClass('selected').css({'background':'#b0001a', 'color':'#ffffff'}).children('i').css({'color':'#ffffff'}); // Если это меню с подпунктами if ($('[data-menu="'+module+'"]').children('.point').length == 0) { $('[data-main-menu="main_'+module+'"]').children('.point').addClass('selected').css({'background':'#3c86c3', 'color':'#ffffff'}).children('i').css({'color':'#ffffff'}); } // Раскрываем меню if ($('[data-menu="'+module+'"]').parent('[data-sub-menu]').length > 0) { $('[data-menu="'+module+'"]').parent('[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(); }); // Панель статистики менеджера $('#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'); }); $('.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'); } // Обработка выделенных документов var selectedArrGet = {}; // Запоминаем выбранных клиентов для дальнейших операций сохраняем в базу выделенное $("[id ^= id_assign]").on('click', function() { // Если нет идентификатора справочника, то игнорируем var selectSpr = $(this).parents('[data-id_assign_spr]'); if (typeof selectSpr == 'undefined' || selectSpr.length === 0) return; // Выделяем все на странице if ($(this).attr('id') == 'id_assign_all' && $(this).prop("checked")) $("[id ^= id_assign]").prop('checked', true); if ($(this).attr('id') == 'id_assign_all' && !$(this).prop("checked")) $("[id ^= id_assign]").prop('checked', false); // Проверяем все выделенные и запоминаем var selectedArr = {}; $("[id ^= id_assign]:checkbox:checked").each(function(index, element) { var tVar = $(element).attr('id'); if (tVar != 'id_assign_all') selectedArr[tVar] = tVar; }); selectedArrGet = selectedArr; selectedArrGetFun(selectSpr.data('id_assign_spr')); selectedArr['spr'] = selectSpr.data('id_assign_spr'); send_request(selectedArr, 'data-exchange', 'data-save-json-temp'); var waitAnswer = setInterval(function() { if (typeof(dataResultTwo) == 'object' && typeof(dataResultTwo.error) != 'string') { //console.log('Сохраняем', dataResultTwo); clearInterval('waitAnswer'); delete dataResultTwo; } }, 100); console.log(selectedArrGet); }); // Если есть уже выделенные клиенты то забираем данные и ставим чек-боксы if (typeof window.module != 'undefined' && window.module != '') { send_request(window.module, 'data-exchange', 'data-get-json-temp'); var waitAnswer = setInterval(function() { if (typeof(dataResultThree) == 'object' && typeof(dataResultThree.error) != 'string') { //console.log('Получаем', dataResultThree); selectedArrGet = dataResultThree.answer; selectedArrGetFun(selectedArrGet); clearInterval('waitAnswer'); delete dataResultThree; } }, 100); } function selectedArrGetFun(selectedArrGets) { if (typeof selectedArrGets != 'undefined' && Object.keys(selectedArrGets).length > 0) { for (var key in selectedArrGets) { $('#'+selectedArrGets[key]).prop('checked', true); } } } // Добавление задачи $('#add_tasks').on('click', function() { //console.log('!', document.location.pathname.indexOf('/_')); if (document.location.pathname.indexOf('/_') >= 0) { setTimeout(function() { $('[name=tasks_object_url]').val(document.location); var name = $('body').find('h2').first().text(); if (!$('#tasks_object_dop').length) $('#tasks_object').append(''); $('#_tasks_object').val(name); }, 250); } if (document.location.pathname.indexOf('/_') === -1) { delete selectedArrGet['spr']; // Если есть выделенные документы для создания задач if (typeof window.module != 'undefined' && window.module != '' && typeof selectedArrGet != 'undefined' && Object.keys(selectedArrGet).length > 0) { setTimeout(function() { if ($('#tasks_object_documents').length === 0) { $('#tasks_object').append(''); } else { $('#tasks_object_documents').val(curUrl[1]).html('Создать задачу/и на основании '+Object.keys(selectedArrGet).length+' выбранных документов'); } // Добавляем поле выбора менеджера if ($('#tasks_object_documents_exec').length === 0) { $('#tasks_id_executors').prepend(''); } }, 250); } else { $('#tasks_object_documents').remove(); $('#tasks_object_documents_exec').remove(); } } }); // Добавление события $('#add_events').on('click', function() { //console.log('!', document.location.pathname.indexOf('/_')); if (document.location.pathname.indexOf('/_') >= 0) { setTimeout(function() { $('[name=tasks_object_url]').val(document.location); 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.trigger('click'); } 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:#efb573 !important; color:#FFF'); }) // Открываем страницу с контентом по имени и id $('body').on('dblclick', '[data-id]', function(e) { // Пропускаем событие если указано if ($(this).attr('data-id') == 'stop') return; setTimeout(function() { preloader('show'); }, 500); // Действие только если есть у родителя аттрибут 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-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(); preloader('show'); 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; uri.href = uri.protocol+'//'+uri.hostname+'/'+module+'/'+formName+'/'+url; }); // Если задана переменная и есть такая форма, то отображаем её if (typeof curUrl[2] != 'undefined' && curUrl[2] != '' && $('#'+curUrl[2]+' article').length > 0) { popup('form', '', curUrl[2], false, false); $('.status-select').change(); // TODO: нужна чёткая идетификация того, в каком сегменте находится форма. Могут быть коллизии имён } else if (typeof curUrl[3] !== 'undefined' && curUrl[2] != '' && $('#'+curUrl[3]+' article').length > 0) { popup('form', '', curUrl[3], false, false); $('.status-select').change(); } // Если задана переменная in-form, то также отображаем данную форму // Может использоваться в нетипичных случаях, например в почтовом клиенте, размещенным в карточке клиента var inForm = findGetParameter('in-form'); if (inForm && $('#'+inForm).length > 0) { popup('form', '', inForm, false, false); $('.status-select').change(); } // Проигрывание аудио-записи $('.play-record').on('click', function() { $(this).html(''); }); //---- Аккордеон и виджет $('.accordion h3').click(function() { closeOpen($(this)); saveWidgetStatus($(this).parents('.accordion'), $(this)); }); function closeOpen(t) { var hS = t.parent('section').outerHeight() - 20; // Зависит от padding var h = t.next('div').children('.spanContent').height() + hS; var curGroup = t.parents('.accordion').attr('data-group'); $('.accordion[data-group="'+curGroup+'"]').each(function(index, element) { $(element).find('.acrdCont').css('height', '0px'); }) $('.accordion h3').removeClass('next'); t.addClass('next'); var hN = t.next('div'); if (hN.height() < 50) { hN.css('height', h); } } // Активируем перетаскивание виджета с сортировкой $('.drag').on('mousedown', function() { $('.drags').sortable({ revert:true, stop: dragReorder }).disableSelection(); $('.drags').sortable('enable'); }); // Изменение размера виджета $('.resize').click(function() { $(this).parents('.accordion').toggleClass('half-size'); resizeWidget(this); saveWidgetStatus($(this).parents('.accordion'), $(this)); }); // Скрытие виджета $('.hides').click(function() { var cur = $(this).parents('.accordion'); cur.addClass('accordion-hide'); saveWidgetStatus(cur, $(this)); // Выводим в соседнем табе настройки видимости виджетов var check = ''+cur.children('section').find('h3').text()+''; $('.config').append(check); }); // Аккордеон и виджет считываем информацию if ($('.drags')) { if (!localStorage['JustCRM_accordion']) localStorage['JustCRM_accordion'] = '{}'; var curStat = JSON.parse(localStorage['JustCRM_accordion']); if (curStat[curUrl[1]]) { var pageObj = curStat[curUrl[1]]; for (key in pageObj) { for (k in pageObj[key]) { var cur = $('[rel="'+k+'"]'); // Устанавливаем порядковый индекс отображения виджета cur.attr('data-index', pageObj[key][k].index); // Размер по ширине if (pageObj[key][k].size === true) cur.addClass('half-size'); // Сложен/разложен if (pageObj[key][k].slideopen === true) closeOpen(cur.children('section').find('h3')); // Скрыт/отображен if (pageObj[key][k].visible === false) { cur.addClass('accordion-hide'); // Выводим в соседнем табе настройки видимости виджетов var check = ''+cur.children('section').find('h3').text()+''; $('.config').append(check); } } } } else { $('.accordion h3').first().trigger('click'); } // Сортируем виджеты по индексам и отображаем var widjet = $('.drags'), widjetObj = widjet.children('.accordion'); widjetObj.sort(function(a,b){ var an = 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-comment').on('click', function() { location.href = '/'+module+'/_details/'+curUrl[3]+'?edit-comment='+$(this).attr('id-comment')+'&in-form=tasks-comments-task'; }); // Редактирование и удаление комментариев во внутренней почте $('.edit-comment-inmail').on('click', function() { location.href = '/'+module+'/_details/'+curUrl[3]+'?edit-comment-inmail='+$(this).attr('id-comment')+'&in-form=inmail-comments'; }); // Ответ на комментарий $('.reply-comment-inmail').on('click', function() { popup ('form', '', 'inmail-comments', false, false); $('#id_inmail-comments').val($(this).attr('id-letter')); $('#id_inmail-comments-reply').val($(this).attr('id-comment-parent')); }); // Редактирование и удаление контактов $('.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-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') { // Если данная форма имеет класс send-false, то прерываем дальшую обработку // Такая форма используется для промежуточной обработки данных без их отправки на backend if ($(form).hasClass('send-false')) return; 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'); return; break; default: dataSend (formId, datas, files); } } } }); // Функция отправки данных и файлов function dataSend (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]); //} // Правило для формы авторизации var uri = (url == 'login_form') ? '/' : '/'+module+'/'+url; // Правило для форм с классическим типом отправки данных if (url == 'filter') { $('#'+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 'inmail-comments_form': case 'tasks-comments-task_form': case 'client_contacts_form': case 'client_comments_form': case 'files-order': case 'client_file_cat_form': case 'client_file_form': case 'client_vehicles_form': case 'client_add_phone_form': case 'client_needs_form': case 'client_budjet_form': case 'client_features_form': 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); case 'order-clock_form': case 'order-comments_form': delayReload(100); 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; } 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() ); } // Генерация GUID function newGuid() { function s4() { return Math.floor((1 + Math.random()) * 0x10000) .toString(16) .substring(1); } return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4(); } // Снимает все checkbox function uncheckAll() { var w = document.getElementsByTagName('input'); for(var i = 0; i < w.length; i++){ if(w[i].type=='checkbox'){ // Если поле имеет аттрибут data-command="no-clear", то не удаляем из него значение if ($(w[i]).attr('data-command') == 'no-clear') return; 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%; margin: auto; width: 40%;' : ''; var icon = (!background) ? '' : ''; var fixe = (fix) ? 'width: 40%;' : ''; $('body').append(''); var thisH = $('.popup .wind .head').last(); var thisC = $('.popup .wind .cont').last(); switch (type) { case 'good': thisH.addClass('good').append(head); thisC.append(message); break; case 'bad': thisH.addClass('bad').append(head); thisC.append(message); break; case 'atten': thisH.addClass('atten').append(head); thisC.append(message); thisC.append('
    '); break; case 'form': if ( $('#'+message+'_head') ) { head = $('#'+message+'_head').html(); } thisH.addClass('form').append(head); thisC.append($('#'+message)); break; default: thisH.append(head); thisC.append(message); } // Проверяем наличие поля, и если оно есть, то даем ему фокус //$('.popup').last().find('input').first().focus().select(); } function delayClosePopup(time) { setTimeout(function() { $('.popup').last().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).parents('.wind').find('.close').trigger('click'); }); $(document).on('click', '.popup, .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); t.children('.wind').removeClass('zoomIn').addClass('zoomOut'); t.fadeOut('slow', function() { t.remove(); }); var curClass = $('.popup .wind .head').last().attr('class'); if (curClass.indexOf('good') < 0 && curClass.indexOf('bad') < 0 && curClass.indexOf('atten') < 0) { // .last() чтобы операция по возврату формы в начальный контейнер производилась только над верхней (последней открытой форме) $('#_wrap').append($('.popup').last().find('article')); } // Подменяем текущий URL на предыдущий (если это не справочник), чтобы при нажатии кнопки Back в браузере не открывалось окно var uri = window.location; if (uri.pathname.indexOf('/_') < 0) window.history.replaceState( {}, window.location, uri.protocol+'//'+uri.hostname+'/'+module); // Если форма открыта для создания документа, то остаемся на этой страницы if (typeof formGuid == "undefined" || formGuid == '' ) return; // Если вызвали документ на редактирование со страницы полной информациии и popup-окно было открыто одно if (document.referrer.indexOf('/_') >= 0 && $('.popup').length < 2 && $('.popup').find('.form').length > 0) window.history.go(-1); }); // Если изображение $(document).on('click', '.img', function(e) { if( !$('img').is('#popupImg') ) { var i = new Image(); i.src = $(this).attr('src'); var width = i.width; var height = i.height; popup ('', '', ''); } }); // Подтверждение действия function popupConfirmYes(fName, one, two, three, four, five) { try { eval(fName)(one, two, three, four, five); } catch(e) { console.log('Ошибка при вызове: '+fName+' | '+e.name); } } // Если в окне форма и она вызвана для добавления документа, то обнуляем её поля $(document).on('click', '.clear', function(e) { // Удаляем файловые блоки $('.file-blocks').remove(); // Показываем скрытые поля только для внутренней почты var inmailBlock = $('.status-select').parent('div'); if (typeof inmailBlock != 'undefined' && inmailBlock.length > 0 && inmailBlock.parents('form').attr('id') == 'inmail_form') { inmailBlock.css({'display':'inline-block'}); inmailBlock.prev('div').attr('class', 'w2-3'); } uncheckAll(); $('.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).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 = {}; dataResultThree = {}; dataResultFour = {}; function send_request(data, form, command, 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 'data-trash': case 'data-trash-no-back': data = data.split(' | '); preloader('show'); break; case 'data-add-task': preloader('show'); default: // Проверяем, нет-ли значений передаваемых из формы массивом typeof data == 'object' && ! if ( Array.isArray(data) ) { var i = 0; for (key in data) { if (data[key].name.indexOf('[]') >= 0) { i++; var temp = data[key].name.split('['); data[key].name = temp[0]+'['+i+temp[1]; } } } // Если строка if (typeof data == 'string') { data = data.split(); } } // Если требуется обратиться в нестандартную папку var custom_url = (customUrl) ? customUrl : 'ajax-send'; $.ajax({ url: '/'+custom_url+'/'+command+'.php?guid='+guid, type: 'POST', dataType : 'json', contentType: 'application/json', data: JSON.stringify(data), success: function (respond, textStatus, jqXHR) { switch (command) { case 'data-verify-inmail': dataResultFour = respond; return; case 'data-add-order': case 'data-edit-order': case 'data-make-invoice': dataResultThree = respond; popup ('good', 'Успешно!', 'Запрос выполнен!', true, false); delayClosePopup (500); return; case 'data-save-json-temp': dataResultTwo = respond; return; case 'data-get-json-temp': dataResultThree = respond; return; case 'data-clients-search-inn-kpp': case 'data-client-widget': dataResult = respond; return; break; case 'get_orders': dataResultFive = respond; return; break; case 'data-trash': case 'data-trash-no-back': popup ('good', 'Успешно!', 'Запрос выполнен!', true, false); break; case 'data-add-task': popup ('good', 'Успешно!', 'Запрос выполнен!', true, false); var id_executors = {}; for (key in data) { if (data[key].name.indexOf('id_executors') >= 0) { id_executors[key] = data[key].value; } } sendSocket('{"command":"new_task", "task_url":"/tasks/_details/'+respond.id+'", "id":"'+id+'", "id_client":"'+guid+'", "id_executors":'+JSON.stringify(id_executors)+'}'); break; case 'data-make-call': popup ('good', 'Успешно!', 'Выполняется вызов на номер: '+data, true, false); break; default: delete dataResult; dataResult = respond; } }, error: function(jqxhr, status, errorMsg) { switch (command) { case 'data-add-order': 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 'send_request_prod_limit': case 'data-verify-inmail': return true; break; case 'send_request_dadata_geo': popup ('bad', 'Внимание!', 'Адрес не может быть распознан!
    Адрес зафиксирован по введенным координатам.', true, false); break; case 'send_request_dadata': popup ('bad', 'Внимание!', 'Адрес не может быть распознан!
    Введите координаты вручную.', true, false); break; default: popup ('bad', 'Ошибка!', 'Сервер недоступен!', true, false); } }, complete: function () { switch (command) { case 'data-trash': case 'data-trash-no-back': case 'data-add-task': preloader(); delayClosePopup (500); // Добавляем строку параметров в конце (если они есть) if (typeof(location.href.split('?')[1]) != 'undefined' && location.href.split('?')[1] != 'one=true') { delayReload (500, '/'+curUrl[1]+'?'+location.href.split('?')[1]); } else { delayReload (500); } break; case 'data-routes-check': popup ('good', 'Успешно!', 'Запрос выполнен!', true, false); preloader(); delayClosePopup (500); delayReload (500); break; case 'data-client-widget': preloader(); break; case 'send_request_prod_limit': return true; break; } } }); break; } } // Фильтрация списка менеджеров по рег. управляющему $(function(){ return; if ($('#filter_manager').length == 1) { var list = {}; // Запоминаем весь список $('#filter_manager').children('option').each(function(index, element) { list[index] = element; }); setList(); $('#filter_reg_manager').on('change', function() { setList(); }); function setList($this) { var copyList = ''; var val = $('#filter_reg_manager').val(); if (val) { // не везде они есть val = val.split(' | '); // return; } var dataBranch = ''; var dataPosition = ''; $.each(list, function(key, value) { var dataVal = $(value).val().split(' | '); dataBranch = dataVal[0]; dataPosition = dataVal[1]; if (dataBranch == val[0] || dataBranch == '%') { // Если это "Самарский филиал" if (val[0] == '5') { // Если группа пользователя "Руководитель регионального отдела продаж" if (val[1] == '8' && (dataPosition == '3' || typeof dataPosition == 'undefined')) copyList += list[key].outerHTML; // Если группа пользователя "Региональный управляющий" if (val[1] == '4' && (dataPosition == '2' || dataPosition == '5' || typeof dataPosition == 'undefined')) copyList += list[key].outerHTML; // Если группа пользователя "Руководитель отдела продаж" if (val[1] == '7' && (dataPosition == '2' || typeof dataPosition == 'undefined')) copyList += list[key].outerHTML; } else { // Остальные филиалы copyList += list[key].outerHTML; } } if (val[0] == '%' && list[key].value != '%') { copyList += list[key].outerHTML; } }); $('#filter_manager').html(copyList); } } }); $(function(){ // Запрос на число новый и просроченных задач if (typeof localStorage['count-inmail'] != 'undefined') $('.marker-inmail').text(localStorage['count-inmail']); setInterval(function() { if (guid != '') getCountInmail(); }, 5000); }); // Запрос на число новый и просроченных задач function getCountInmail() { send_request('{"verify-inmail-user-id":"'+id+'"}', 'data-exchange', 'data-verify-inmail'); if (typeof dataResultFour['count-inmail'] != 'undefined') { if (!isNaN(Number(dataResultFour['count-inmail'])) && Number($('.marker-inmail').text()) !== Number(dataResultFour['count-inmail'])) { $('.marker-inmail').text(dataResultFour['count-inmail']); if (Number(localStorage['count-inmail']) <= Number(dataResultFour['count-inmail'])) { notifyMe('Уведомление', 'У Вас есть непрочитанные письма!', 'inmail'); } localStorage['count-inmail'] = dataResultFour['count-inmail']; } } } // Корзина заказа - НОВАЯ КОРЗИНА - Начало $(function(){ if (typeof localStorage['JustCRM-OrderCart'] == 'undefined') localStorage['JustCRM-OrderCart'] = '{}'; orderStat(); orderMarkerView(); if (typeof localStorage['JustCRM-OrderCart'] != 'undefined') { $('#marker-cart').on('click', function() { $('#ordercard_form').find('[class ^= table-type-]').find('#ordercard-list').children().remove(); var orderCartAll = JSON.parse(localStorage['JustCRM-OrderCart']); if (Object.keys(orderCartAll).length > 0) { for (key in orderCartAll) { var typeNomenView = '.table-type-'+orderCartAll[key][7].value; var typeNomenTemplate = '#ordercard-template-type-'+orderCartAll[key][7].value; var template = $(typeNomenTemplate).find('.position'); $(typeNomenView).show(); var clone = template.clone(); switch (orderCartAll[key][7].value) { // Изделия из листового металла case '2': clone.attr('data-id-pos', key); clone.children('.ordercard-id-nomen').val(key); clone.children('.quantity').children('input').val(orderCartAll[key][0].value); clone.children('.name').html(orderCartAll[key][2].value); clone.children('.item').html(orderCartAll[key][3].value); var posSumm = Number(orderCartAll[key][5].value.replace(',', '.').replace(' ', '')) * Number(orderCartAll[key][0].value); clone.children('.price').children('input').val(posSumm.toFixed(2).replace('.', ',').replace(' ', '')); clone.children('.price').attr('data-price', orderCartAll[key][5].value); clone.children('.ordercard-base-price').val(orderCartAll[key][5].value.replace(',', '.').replace(' ', '')); clone.children('.delete').children('i').attr('onclick', "popup('atten', 'Внимание!', 'Вы подтверждаете удаление?', true, false, '"+key+"', 'deleteOrderPos', 'JustCRM-OrderCart', '.table-type-"+orderCartAll[key][7].value+"');"); clone.children('.color').html(orderCartAll[key][6].value); if (parseInt(orderCartAll[key][8].value)) { clone.children('.A').html(''); } else { clone.children('.A').html(orderCartAll[key][8].value+' '); } if (parseInt(orderCartAll[key][9].value)) { clone.children('.B').html(''); } else { clone.children('.B').html(orderCartAll[key][9].value+' '); } if (parseInt(orderCartAll[key][10].value)) { clone.children('.C').html(''); } else { clone.children('.C').html(orderCartAll[key][10].value+' '); } if (parseInt(orderCartAll[key][11].value)) { clone.children('.D').html(''); } else { clone.children('.D').html(orderCartAll[key][11].value+' '); } clone.children('.l_zag1').html(orderCartAll[key][12].value); clone.children('.l_zag2').html(orderCartAll[key][13].value); clone.children('.length').children('input').val(orderCartAll[key][18].value.replace(',', '.').replace(' ', '')); clone.children('.image').html(orderCartAll[key][19].value); tabletype2(clone.children('.quantity'), orderCartAll); break; // Подоконник в нарезку case '3': clone.attr('data-id-pos', key); clone.children('.ordercard-id-nomen').val(key); clone.children('.quantity').children('input').val(orderCartAll[key][0].value); clone.children('.name').html(orderCartAll[key][2].value); clone.children('.item').html(orderCartAll[key][3].value); var lengthTemp = Number(orderCartAll[key][8].value.replace(',', '.').replace(' ', '')); clone.find('.length_pod').children('input').val(lengthTemp); clone.find('.length_all').html(lengthTemp * Number(orderCartAll[key][0].value) / 1000); var posSumm = Number(orderCartAll[key][6].value.replace(',', '.').replace(' ', '')) * Number(orderCartAll[key][0].value) * (lengthTemp / 1000); clone.children('.price').children('input').val(posSumm.toFixed(2).replace('.', ',').replace(' ', '')); clone.children('.price').attr('data-price', orderCartAll[key][6].value); clone.children('.ordercard-base-price').val(orderCartAll[key][6].value.replace(',', '.').replace(' ', '')); clone.children('.delete').children('i').attr('onclick', "popup('atten', 'Внимание!', 'Вы подтверждаете удаление?', true, false, '"+key+"', 'deleteOrderPos', 'JustCRM-OrderCart', '.table-type-"+orderCartAll[key][7].value+"')"); break; // Сэндвич в нарезку case '4': clone.attr('data-id-pos', key); clone.children('.ordercard-id-nomen').val(key); clone.children('.quantity').children('input').val(orderCartAll[key][0].value); clone.children('.name').html(orderCartAll[key][2].value); clone.children('.item').html(orderCartAll[key][3].value); var posSumm = Number(orderCartAll[key][6].value.replace(',', '.').replace(' ', '')) * Number(orderCartAll[key][0].value); clone.children('.price').children('input').val(posSumm.toFixed(2).replace('.', ',').replace(' ', '')); clone.children('.price').attr('data-price', orderCartAll[key][6].value); clone.children('.ordercard-base-price').val(orderCartAll[key][6].value.replace(',', '.').replace(' ', '')); clone.children('.delete').children('i').attr('onclick', "popup('atten', 'Внимание!', 'Вы подтверждаете удаление?', true, false, '"+key+"', 'deleteOrderPos', 'JustCRM-OrderCart', '.table-type-"+orderCartAll[key][7].value+"')"); break; // Стандартная номенклатура case '1': clone.attr('data-id-pos', key); clone.children('.ordercard-id-nomen').val(key); clone.children('.quantity').children('input').val(orderCartAll[key][0].value); clone.children('.name').html(orderCartAll[key][2].value); clone.children('.item').html(orderCartAll[key][3].value); var posSumm = Number(orderCartAll[key][6].value.replace(',', '.').replace(' ', '')) * Number(orderCartAll[key][0].value); clone.children('.price').children('input').val(posSumm.toFixed(2).replace('.', ',').replace(' ', '')); clone.children('.price').attr('data-price', orderCartAll[key][6].value); clone.children('.ordercard-base-price').val(orderCartAll[key][6].value.replace(',', '.').replace(' ', '')); clone.children('.delete').children('i').attr('onclick', "popup('atten', 'Внимание!', 'Вы подтверждаете удаление?', true, false, '"+key+"', 'deleteOrderPos', 'JustCRM-OrderCart', '.table-type-"+orderCartAll[key][7].value+"')"); clone.children('.currency').html(orderCartAll[key][4].value); break; } $('#ordercard_form').find(typeNomenView).find('#ordercard-list').append(clone); } orderStat(); popup ('form', '', 'ordercard', false, false); } }); } $('.clear-nomens-to-cart').on('click', function() { popup('atten', 'Внимание!', 'Вы подтверждаете очистку корзины?', true, false, '', 'deleteOrderAllPos'); }); $('.add-order').on('click', function() { $(this).parents('form').validationEngine('detach'); $(this).parents('form').validationEngine('attach', { promptPosition : 'bottomLeft', onValidationComplete: function(form, status){ if (status === true) { send_request($('#ordercard_form').serialize(), 'data-exchange', 'data-add-order'); 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-length-dop', function() { orderStat($(this)); }); $('body').on('input', '.ordercard-quantity', function() { orderStat($(this)); }); $('body').on('input', '.ordercard-price', function() { orderStat(); }); $('body').on('input', '[name=A], [name=B], [name=C], [name=D], .ordercard-length', function() { orderStat($(this)); }); // Распознавание адреса $('.search-map').on('click', function() { send_request($(this).parent().prev('input').val(), 'data-exchange', 'send_request_dadata'); var waiting = setInterval(function() { if (typeof(dataResult) != 'undefined' && typeof(dataResult.suggestions) != 'undefined' && typeof(dataResult.suggestions[0]) != 'undefined') { if (typeof(dataResult.error) != 'undefined') { clearTimeout(waiting); dataResult = {}; } popup ('good', 'Успешно!', 'Адрес распознан и обработан!', true, false); $('#order-delivery-address').val(dataResult.suggestions[0].unrestricted_value); $('#order-delivery-coords').val(dataResult.suggestions[0].data.geo_lat+','+dataResult.suggestions[0].data.geo_lon); clearTimeout(waiting); dataResult = {}; $('#order-delivery-address').trigger('input'); } }, 100); }); // Поиск клиента для заказа var targetInputClient = '#order-client'; $('body').on('input', targetInputClient, function() { $(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].name+'
    ИНН:'+dataResult[key].INN+' | КПП:'+dataResult[key].KPP+'
    '; } $(this).next('.search-result').fadeIn(); if ( !$(this).next('.search-result').hasClass('who') ) $(this).next('.search-result').addClass('who'); $(this).next('.search-result').html(result); } } 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'}); 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'); }); $('#order-client, #id_client, #order_client_comments, #order-delivery-address, #order-delivery-coords, #order_status').on('change, input', function() { var orderF1 = $('#order-client').val(); var orderF2 = $('#id_client').val(); var orderF3 = $('#order_client_comments').val(); var orderF4 = $('#order-delivery-address').val(); var orderF5 = $('#order-delivery-coords').val(); var orderF6 = $('#order_status').val(); var orderF7 = $('#ordercard-edit-flag').val(); var orderFAll = [orderF1, orderF2, orderF3, orderF4, orderF5, orderF6, orderF7]; 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); dataResultThree = '{}'; orderStat(); orderMarkerView(); setTimeout(function(){ $('#marker-cart').trigger('click'); }, 1000); } }, 500); } // Перерасчет изделий из листового металла function tabletype2(quantityField, orderCartAll) { console.log('Мы тут', quantityField, orderCartAll); var Avalue = Number(quantityField.parents('tr').find('.A-value').val()); var Ak = Number(orderCartAll[quantityField.parents('.position').data('id-pos')][8].value); var Bvalue = Number(quantityField.parents('tr').find('.B-value').val()); var Bk = Number(orderCartAll[quantityField.parents('.position').data('id-pos')][9].value); var Cvalue = Number(quantityField.parents('tr').find('.C-value').val()); var Ck = Number(orderCartAll[quantityField.parents('.position').data('id-pos')][10].value); var Dvalue = Number(quantityField.parents('tr').find('.D-value').val()); var Dk = Number(orderCartAll[quantityField.parents('.position').data('id-pos')][11].value); var Length = Number(quantityField.parents('tr').find('.ordercard-length').val()); var l_zag1 = Number(quantityField.parents('tr').find('.l_zag1').text()) / 1000; var l_zag2 = Number(quantityField.parents('tr').find('.l_zag2').text()) / 1000; var Quantity = Number(quantityField.parents('tr').find('.ordercard-quantity').val()); var priceM2 = Number( quantityField.parents('tr').find('[data-price]').attr('data-price').replace(',', '.').replace(' ', '')); // Проверяем значения и считаем по формуле // ФОРМУЛА ЦЕНА за 1шт = (A*Ka+B*Kb+C*kc+D*kd+ЗАГИБ1+ЗАГИБ2) * Длина * ЦЕНА ЛИСТА console.log('('+Ak+' + '+Bk+' + '+Ck+' + '+Dk+')'); var Akk = (isNaN(Ak)) ? 0 : (Avalue / 1000) * Ak; var Bkk = (isNaN(Bk)) ? 0 : (Bvalue / 1000) * Bk; var Ckk = (isNaN(Ck)) ? 0 : (Cvalue / 1000) * Ck; var Dkk = (isNaN(Dk)) ? 0 : (Dvalue / 1000) * Dk; var finalFormula = (Akk + Bkk + Ckk + Dkk + l_zag1 + l_zag2) * (Length / 1000) * Quantity * priceM2; var finalFormulaMp = (Akk + Bkk + Ckk + Dkk + l_zag1 + l_zag2) * 1 * Quantity * priceM2; quantityField.parents('tr').find('.price_m2').text(priceM2); quantityField.parents('tr').find('.price_mp').text(finalFormulaMp.toFixed(2)); console.log('('+Akk+' + '+Bkk+' + '+Ckk+' + '+Dkk+' + '+l_zag1+' + '+l_zag2+') * '+Length / 1000+' * '+Quantity+' * '+priceM2); console.log(finalFormula); quantityField.parents('tr').find('.ordercard-price').val(Number(finalFormula).toFixed(2).replace('.', ',').replace(' ', '')); summCalc(); localStorage['JustCRM-OrderCart'] = JSON.stringify(orderCartAll); } function orderStat(quantityField) { if (typeof quantityField != 'undefined') { // Если изменение в полях позиции var orderCartAll = JSON.parse(localStorage['JustCRM-OrderCart']); var qF = quantityField; var pos = quantityField.parents('.position'); var idPos = pos.data('id-pos'); // Записываем доп. параметры addDopField('A-value', 14); addDopField('B-value', 15); addDopField('C-value', 16); addDopField('D-value', 17); addDopField('ordercard-length', 18); addDopField('ordercard-length-dop', 8); addDopField('ordercard-quantity', 0); function addDopField(fieldName, posNum) { try { var thisVar = {name: fieldName, value: pos.find('input.'+fieldName).val().replace('.', ',').replace(' ', '')}; orderCartAll[idPos][posNum] = thisVar; } catch (e) { } } // Если это листовые материалы из металла if (quantityField.parents('div').attr('class') == 'table-type-2') { tabletype2(quantityField, orderCartAll); return; } // Если есть поле с указанием погонных метров if (quantityField.parents('div').attr('class') == 'table-type-3') { var pmLength = Number(quantityField.parents('tr').find('.ordercard-length-dop').val()); if (pmLength !== 0) { pmLength = pmLength * Number(quantityField.val()) / 1000; } quantityField.parents('tr').find('.length_all').html(pmLength); } // Пересчитываем стоимость if (quantityField.attr('class') == 'ordercard-quantity' || quantityField.attr('class') == 'ordercard-length-dop') { var allQuant = 0; var allSumm = 0; if (typeof pmLength != 'undefined') { var summPos = Number( quantityField.parents('tr').find('[data-price]').attr('data-price').replace(',', '.').replace(' ', '')) * Number(quantityField.parents('tr').find('.ordercard-quantity').val()) * pmLength; } else { var summPos = Number( quantityField.parent().next('[data-price]').attr('data-price').replace(',', '.').replace(' ', '')) * Number(quantityField.val()); } quantityField.parents('tr').find('.price').children('input').val( summPos.toFixed(2).replace('.', ',').replace(' ', '') ); if (quantityField.attr('class') == 'ordercard-quantity') orderCartAll[quantityField.parents('.position').data('id-pos')][0].value = quantityField.val(); if (quantityField.attr('class') == 'ordercard-length-dop') orderCartAll[quantityField.parents('.position').data('id-pos')][8].value = quantityField.val(); quantityField.parents('table').find('.ordercard-quantity').each(function(index, element) { //console.log('Кол-во:', $(element)[0].value, 'Цена:', $(element).parents('tr').find('.ordercard-price').val(), 'Длина:', pmLength); allQuant += Number($(element)[0].value); allSumm += Number($(element).parent().next().children('input').val().replace(',', '.')); }); quantityField.parents('table').find('.all-quant').children('strong').html(allQuant); quantityField.parents('table').find('.all-summ').children('strong').html(allSumm.toFixed(2).replace('.', ',')); } localStorage['JustCRM-OrderCart'] = JSON.stringify(orderCartAll); } else { summCalc(); } if (typeof localStorage['JustCRM-OrderCart-field'] != 'undefined') { var orderFAll = JSON.parse(localStorage['JustCRM-OrderCart-field']); $('#order-client').val(orderFAll[0]); $('#id_client').val(orderFAll[1]); $('#order_client_comments').val(orderFAll[2]); $('#order-delivery-address').val(orderFAll[3]); $('#order-delivery-coords').val(orderFAll[4]); if (typeof orderFAll[5] == 'undefined' && orderFAll[5] == '') { $('#order_status option[value="1"]').prop('selected', true); } else { $('#order_status option[value="'+orderFAll[5]+'"]').prop('selected', true); } $('#order_status').trigger('change'); $('#ordercard-edit-flag').val(orderFAll[6]); } } function summCalc() { $('#ordercard_form').find('[class ^= table-type-]').each(function(index, element) { var allQuant = 0; var allSumm = 0; $(element).find('.ordercard-quantity').each(function(index, element) { allQuant += Number($(element)[0].value); allSumm += Number($(element).parent().next().children('input').val().replace(',', '.')); }); $(element).find('.all-quant').children('strong').html(allQuant); $(element).find('.all-summ').children('strong').html(allSumm.toFixed(2).replace('.', ',')); }); } function addOrder(orderClient, idClient, clientCatPrice) { var orderF4 = '', orderF5 = '', orderF6 = '', orderF7 = '', orderF8 = ''; var orderFAll = [orderClient, idClient, orderF3, orderF4, orderF5, orderF6, orderF7]; localStorage['JustCRM-OrderCart-field'] = JSON.stringify(orderFAll); } function deleteOrderAllPos() { $('#ordercard_form').find('[class ^= table-type-]').find('#ordercard-list').children().remove(); localStorage['JustCRM-OrderCart'] = '{}'; localStorage['JustCRM-OrderCart-field'] = '[]'; orderMarkerView(); delayClosePopup(0); setTimeout(function(){ delayClosePopup(500); }, 500); } function deleteOrderPos(storeVarId, storeVar, templateId) { // 5 JustCRM-OrderCart .table-type-2 var orderCartAll = JSON.parse(localStorage['JustCRM-OrderCart']); delete orderCartAll[storeVarId]; localStorage['JustCRM-OrderCart'] = JSON.stringify(orderCartAll); $(templateId).find('#ordercard-list').children('[data-id-pos="'+storeVarId+'"]').remove(); orderMarkerView(); delayClosePopup(0); setTimeout(function(){ // Если не осталось номенклатуры данной группы, то скрываем всю таблицу if ($(templateId).find('#ordercard-list').children('tr').length === 0) $(templateId).hide(); // Если не осталось ни одной позиции в корзине, то закрываем окно if ($(templateId).parents('#ordercard_form').find('[class ^= table-type-]').find('#ordercard-list').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(); } } } // Корзина заказа - НОВАЯ КОРЗИНА - Конец // Телефон - вызов номера // Для AMI 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', 'make-call'); delayClosePopup (1000); delayClosePopup (2000); } else { popup ('bad', 'Ошибка!', 'Номер некорректен!
    Исправьте для успешного набора.', true, false); } } /* Для ARI 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; } } } } // Уведомления - Конец // Вывод на печать function toPrint(obj, zag) { var objPrint = $(obj).clone(); var newWin = window.open('/components/inc/print.html', 'Вывод на печать', 'width=1200,height=600,resizable=yes,scrollbars=yes,status=no,toolbar=no,location=no,menubar=no'); newWin.onload = function() { var div = newWin.document.createElement('div'); body = newWin.document.body; div.innerHTML = objPrint[0].innerHTML; body.insertBefore(div, body.firstChild); $(body).find('.print').remove(); $(body).children('div').css({'margin':'5em'}); $(body).children('div').prepend('

    '+zag+'

    '); setTimeout(function() { newWin.print(); }, 500); } } // Скролл до объекта function scr(obj, delay) { try { if (!delay) var delay = 0; setTimeout (function () { $('html, body').animate({ scrollTop: $('#'+obj).offset().top }, 250, 'swing'); preloader(); }, 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; }