// Глобальные переменные и операции
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 = "";
}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(''+name+' ');
$('#_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('Создать задачу/и на основании '+Object.keys(selectedArrGet).length+' выбранных документов ');
} 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(''+name+' ');
$('#_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 += ''+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 += ' ';
}
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 += ''+elements[i].value+' ('+elements[i+1][elements[i+1].value].innerText+') ';
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;
}