Commit 1ca1b9e2 authored by Olessya Khussainova's avatar Olessya Khussainova

user ,odules

parent 1e817915
...@@ -42,6 +42,7 @@ crm/methodologist-manual/resources/img/canban.png -text ...@@ -42,6 +42,7 @@ crm/methodologist-manual/resources/img/canban.png -text
crm/methodologist-manual/resources/img/canban_2.png -text crm/methodologist-manual/resources/img/canban_2.png -text
crm/methodologist-manual/resources/img/connections.png -text crm/methodologist-manual/resources/img/connections.png -text
crm/methodologist-manual/resources/img/crm.png -text crm/methodologist-manual/resources/img/crm.png -text
crm/methodologist-manual/resources/img/custom_dyn_table.png -text
crm/methodologist-manual/resources/img/dfd.png -text crm/methodologist-manual/resources/img/dfd.png -text
crm/methodologist-manual/resources/img/eventChooser.png -text crm/methodologist-manual/resources/img/eventChooser.png -text
crm/methodologist-manual/resources/img/funnel_1.png -text crm/methodologist-manual/resources/img/funnel_1.png -text
...@@ -71,6 +72,7 @@ crm/methodologist-manual/src/crm_consist/user_components.md -text ...@@ -71,6 +72,7 @@ crm/methodologist-manual/src/crm_consist/user_components.md -text
crm/methodologist-manual/src/crm_consist/user_components_button.md -text crm/methodologist-manual/src/crm_consist/user_components_button.md -text
crm/methodologist-manual/src/crm_consist/user_components_connection.md -text crm/methodologist-manual/src/crm_consist/user_components_connection.md -text
crm/methodologist-manual/src/crm_consist/user_components_dyn_table.md -text crm/methodologist-manual/src/crm_consist/user_components_dyn_table.md -text
crm/methodologist-manual/src/crm_consist/user_components_dyn_table_themes.md -text
crm/methodologist-manual/src/crm_consist/user_components_registryChooser.md -text svneol=unset#text/plain crm/methodologist-manual/src/crm_consist/user_components_registryChooser.md -text svneol=unset#text/plain
crm/methodologist-manual/src/crm_consist/user_modules.md -text crm/methodologist-manual/src/crm_consist/user_modules.md -text
crm/methodologist-manual/src/crm_install.md -text crm/methodologist-manual/src/crm_install.md -text
......
...@@ -11,7 +11,10 @@ ...@@ -11,7 +11,10 @@
- [Пользовательский компонент связи из интерфейса](#user_components.connection) - [Пользовательский компонент связи из интерфейса](#user_components.connection)
- [Динамическая таблица плана продаж](#user_components.dyn_table_themes)
<#include "crm_consist/user_components_registryChooser.md"> <#include "crm_consist/user_components_registryChooser.md">
<#include "crm_consist/user_components_button.md"> <#include "crm_consist/user_components_button.md">
<#include "crm_consist/user_components_dyn_table.md"> <#include "crm_consist/user_components_dyn_table.md">
<#include "crm_consist/user_components_connection.md"> <#include "crm_consist/user_components_connection.md">
<#include "crm_consist/user_components_dyn_table_themes.md">
#### Динамическая таблица плана продаж {#user_components.dyn_table_themes}
Модифицированный компонент представляет собой динамическую таблицу формы
[Сделка](#formDeal).
Имеется возможность удалить столбец, содержащий поля "Тема сотрудничества"
(crm_form_deal_main2_theme_cN) и "План продаж" (crm_form_deal_main2_theme_pvalue_cN)
по нажатию на кнопку "X" над соответствующим столбцом. При сохранении документа
с удаленным столбцом соответствующий документ индекса
[r-crm_registry_deals_plans_custom](#dashboards_productivity) будет удален.
Имеется возможность добавить столбец, содержащий поля "Тема сотрудничества"
(crm_form_deal_main2_theme_cN) и "План продаж" (crm_form_deal_main2_theme_pvalue_cN)
по нажатию на лейбл "+ Добавить столбец". Идентификаторы компонентов нового
столбца:
* "Тема сотрудничества" - crm_form_deal_main2_theme_c%N+1%
* "План продаж" - crm_form_deal_main2_theme_pvalue_c%N+1%
где %N+1% - наибольший порядковый номер компонентов текущего документа + 1.
При сохранении документа с новым столбцом создается новый документ индекса
[r-crm_registry_deals_plans_custom](#dashboards_productivity).
В режиме чтения кнопки удаления ("Х") и добавления ("+ Добавить столбец")
столбцов не отображаются.
При создании новой записи реестра "План продаж" таблица имеет 14 столбцов,
содержащих поля "Тема сотрудничества" (crm_form_deal_main2_theme_cN) и
"План продаж" (crm_form_deal_main2_theme_pvalue_cN).
Максимально допустимое количество столбцов, содержащих поля "Тема сотрудничества"
(crm_form_deal_main2_theme_cN) и "План продаж" (crm_form_deal_main2_theme_pvalue_cN)
в документе по форме - 50. Если таблица имеет 50 столбцов, содержащих поля
"Тема сотрудничества" (crm_form_deal_main2_theme_cN) и "План продаж"
(crm_form_deal_main2_theme_pvalue_cN), по нажатию на лейбл "+ Добавить столбец"
отобразится сообщение об ошибке:
`Превышено максимальное количество столбцов`
![Модифицированная динамическая таблица](resources/img/custom_dyn_table.png)
...@@ -320,7 +320,7 @@ function setMode(radioButton) { ...@@ -320,7 +320,7 @@ function setMode(radioButton) {
} }
view.initDnd = redipsInit; view.initDnd = redipsInit
``` ```
...@@ -437,7 +437,7 @@ JAVASCRIPT код: ...@@ -437,7 +437,7 @@ JAVASCRIPT код:
const data = { const data = {
normal: [ normal: [
['Первичная регистрация', [0, ''], '#e73a00'], ['Первичная регистрация', [0, ''], '#e73a00'],
['Квалификация', [0, ''], '#fa6c00'], ['Квалификация', [0, ''], '#fa6c00'],
['Взращивание', [0, ''], '#ffa900'], ['Взращивание', [0, ''], '#ffa900'],
['Подтверждение интереса', [0, ''], '#ffc500'], ['Подтверждение интереса', [0, ''], '#ffc500'],
...@@ -569,6 +569,7 @@ HTML код: ...@@ -569,6 +569,7 @@ HTML код:
``` xml ``` xml
<style> <style>
.btn_boot-group-lg > .btn_boot, .btn_boot-lg { .btn_boot-group-lg > .btn_boot, .btn_boot-lg {
...@@ -857,14 +858,15 @@ a.btn_boot.disabled, fieldset[disabled] a.btn_boot { ...@@ -857,14 +858,15 @@ a.btn_boot.disabled, fieldset[disabled] a.btn_boot {
} }
</style> </style>
<div class="btn_boot-group" style=" <div class="btn_boot-group" style="
width: 190px; width:275px;
margin: 0 auto; margin: 0 auto;
height: 26px; height: 26px;
align-self: center; align-self: center;
text-align: center; text-align: center;
" innerId="group"> " innerId="group">
<button type="button" class="btn_boot btn_boot-default" innerId="funnel">Воронка</button> <button type="button" class="btn_boot btn_boot-default" innerId="funnel">Воронка</button>
<button type="button" class="btn_boot btn_boot-default active" innerId="canban">Канбан</button> <button type="button" class="btn_boot btn_boot-default active" innerId="canban">Поток</button>
<button type="button" class="btn_boot btn_boot-default " innerId="dashboard">Аналитика</button>
</div> </div>
``` ```
...@@ -880,18 +882,24 @@ $(".btn_boot-group > .btn_boot").click(function(){ ...@@ -880,18 +882,24 @@ $(".btn_boot-group > .btn_boot").click(function(){
var funnel = jQuery(view.container[0]).children("[innerId='group']").children("[innerId='funnel']"); var funnel = jQuery(view.container[0]).children("[innerId='group']").children("[innerId='funnel']");
funnel.text(i18n.tr('Воронка')); funnel.text(i18n.tr('Воронка'));
var canban = jQuery(view.container[0]).children("[innerId='group']").children("[innerId='canban']"); var canban = jQuery(view.container[0]).children("[innerId='group']").children("[innerId='canban']");
canban.text(i18n.tr('Канбан')); canban.text(i18n.tr('Поток'));
var dashboard = jQuery(view.container[0]).children("[innerId='group']").children("[innerId='dashboard']");
dashboard.text(i18n.tr('Аналитика'));
var funnel_cmp = view.playerView.getViewWithId('crm_form_funnel_funnel'); var funnel_cmp = view.playerView.getViewWithId('crm_form_funnel_funnel');
var canban_cmp = view.playerView.getViewWithId('crm_form_funnel_canban'); var canban_cmp = view.playerView.getViewWithId('crm_form_funnel_canban');
var bottom_cmp = view.playerView.getViewWithId('crm_form_funnel_bottom_sum'); var bottom_cmp = view.playerView.getViewWithId('crm_form_funnel_bottom_sum');
var dashboard_cmp = view.playerView.getViewWithId('crm_form_funnel_dashboard');
var filterTable = view.playerView.getViewWithId('crm_form_funnel_filter_panel');
model.playerModel.funnelDrawn = false; model.playerModel.funnelDrawn = false;
model.playerModel.canbanDrawn = false; model.playerModel.canbanDrawn = false;
funnel.click(function(){ funnel.click(function(){
$('body').css('overflow', 'auto'); $('body').css('overflow', 'auto');
funnel_cmp.setVisible(true); funnel_cmp.setVisible(true);
canban_cmp.setVisible(false);
bottom_cmp.setVisible(true); bottom_cmp.setVisible(true);
canban_cmp.setVisible(false);
dashboard_cmp.setVisible(false);
model.playerModel.isFunnel = true; model.playerModel.isFunnel = true;
filterTable.setVisible(true);
if (!model.playerModel.funnelDrawn) { if (!model.playerModel.funnelDrawn) {
model.playerModel.redraw(); model.playerModel.redraw();
} }
...@@ -901,11 +909,22 @@ canban.click(function(){ ...@@ -901,11 +909,22 @@ canban.click(function(){
funnel_cmp.setVisible(false); funnel_cmp.setVisible(false);
canban_cmp.setVisible(true); canban_cmp.setVisible(true);
bottom_cmp.setVisible(false); bottom_cmp.setVisible(false);
dashboard_cmp.setVisible(false);
model.playerModel.isFunnel = false; model.playerModel.isFunnel = false;
filterTable.setVisible(true);
if (!model.playerModel.canbanDrawn) { if (!model.playerModel.canbanDrawn) {
model.playerModel.redraw(); model.playerModel.redraw();
} }
}); });
dashboard.click(function(){
$('body').css('overflow', 'auto');
funnel_cmp.setVisible(false);
bottom_cmp.setVisible(false);
canban_cmp.setVisible(false);
dashboard_cmp.setVisible(true);
dashboard_cmp.calcDim();
filterTable.setVisible(false);
});
``` ```
...@@ -924,6 +943,7 @@ HTML код: ...@@ -924,6 +943,7 @@ HTML код:
``` xml ``` xml
<style> <style>
.btn_boot-group-lg > .btn_boot, .btn_boot-lg { .btn_boot-group-lg > .btn_boot, .btn_boot-lg {
...@@ -1469,6 +1489,9 @@ var onItemClick = function () { ...@@ -1469,6 +1489,9 @@ var onItemClick = function () {
}); });
button.click(function () { button.click(function () {
var data = getData(); var data = getData();
if(!data){
return;
}
saveTask(data, function (result) { saveTask(data, function (result) {
notShowed.push({ notShowed.push({
taskID: JSON.parse(result).taskID, taskID: JSON.parse(result).taskID,
...@@ -1491,9 +1514,29 @@ function getData() { ...@@ -1491,9 +1514,29 @@ function getData() {
task = ''; task = '';
} }
var start = portal.player.model.getModelWithId('start').getValue(); var start = portal.player.model.getModelWithId('start').getValue();
var lead = portal.player.model.getModelWithId('lead'); var lead = portal.player.model.getModelWithId('lead');
var leadId = lead.getValue(); var leadId = '';
var leadName = lead.getTextValue(); var leadName = '';
if (lead) {
leadId = lead.getValue();
leadName = lead.getTextValue();
}
var deal = portal.player.model.getModelWithId('deal');
var dealId = '';
var dealName = '';
if (deal) {
dealId = deal.getValue();
dealName = deal.getTextValue();
}
if(!dealId && !leadId){
portal.player.view.getViewWithId('lead').markInvalid();
portal.player.view.getViewWithId('deal').markInvalid();
AS.SERVICES.showErrorMessage(i18n.tr("Выберите лида или сделку"));
return;
}
var breakChar = String.fromCharCode(13); var breakChar = String.fromCharCode(13);
...@@ -1501,6 +1544,8 @@ function getData() { ...@@ -1501,6 +1544,8 @@ function getData() {
dict + breakChar + dict + breakChar +
leadName + breakChar + leadName + breakChar +
'#submodule=common&action=open_document&document_identifier=' + leadId + breakChar + '#submodule=common&action=open_document&document_identifier=' + leadId + breakChar +
dealName + breakChar +
'#submodule=common&action=open_document&document_identifier=' + dealId + breakChar +
breakChar + breakChar +
task; task;
...@@ -1535,16 +1580,13 @@ var portal = { ...@@ -1535,16 +1580,13 @@ var portal = {
portal.clearPlayer(); portal.clearPlayer();
portal.player = AS.FORMS.createPlayer(); portal.player = AS.FORMS.createPlayer();
portal.player.model.on(AS.FORMS.EVENT_TYPE.valueChange, function (event, model, view) { portal.player.model.on(AS.FORMS.EVENT_TYPE.valueChange, function (event, model, view) {
var task = portal.player.model.getModelWithId('comment');
var start = portal.player.model.getModelWithId('start'); var start = portal.player.model.getModelWithId('start');
var lead = portal.player.model.getModelWithId('lead'); if (!start) {
if (!task || !start || !lead) {
return; return;
} }
var startValue = start.getValue(); var startValue = start.getValue();
var leadValue = lead.getValue(); if (startValue) {
if (startValue && leadValue) {
jQuery("#save_button_task").removeAttr('disabled', 'disabled'); jQuery("#save_button_task").removeAttr('disabled', 'disabled');
} else { } else {
jQuery("#save_button_task").attr('disabled', 'disabled'); jQuery("#save_button_task").attr('disabled', 'disabled');
...@@ -1572,10 +1614,6 @@ var portal = { ...@@ -1572,10 +1614,6 @@ var portal = {
portal.player.view.appendTo($('#form_player_div')); portal.player.view.appendTo($('#form_player_div'));
//jQuery('.asf-datePopup').datepicker("option", "minDate", new Date(2016, 12, 21));
} }
}; };
...@@ -1665,16 +1703,22 @@ function createNotification(taskObject, taskID) { ...@@ -1665,16 +1703,22 @@ function createNotification(taskObject, taskID) {
var textInfo = jQuery('<div></div>', {class: 'text_info'}); var textInfo = jQuery('<div></div>', {class: 'text_info'});
var dictValue = jQuery('<div title="' + _.escape(taskObject[1]) + '" class="dict_block">' + taskObject[1] + '</div>'); var dictValue = jQuery('<div title="' + _.escape(taskObject[1]) + '" class="dict_block">' + taskObject[1] + '</div>');
textInfo.append(dictValue); textInfo.append(dictValue);
var comment = jQuery('<div title="' + _.escape(taskObject[5]) + '" class="comment_block">' + taskObject[5] + '</div>'); var comment = jQuery('<div title="' + _.escape(taskObject[7]) + '" class="comment_block">' + taskObject[7] + '</div>');
textInfo.append(comment); textInfo.append(comment);
infoBlock.append(textInfo); infoBlock.append(textInfo);
var linkBlock = jQuery('<div class="link_block"><a title="' + _.escape(taskObject[2]) + '" href="' + taskObject[3] + '">' + taskObject[2] + '</a></div>'); var linkBlock = jQuery('<div class="link_block"><a title="' + _.escape(taskObject[2]) + '" href="' + taskObject[3] + '">' + taskObject[2] + '</a></div>');
var linkDealBlock = jQuery('<div class="link_block"><a title="' + _.escape(taskObject[4]) + '" href="' + taskObject[5] + '">' + taskObject[4] + '</a></div>');
var element = jQuery("<div class='notification'></div>"); var element = jQuery("<div class='notification'></div>");
element.append(infoBlock); element.append(infoBlock);
element.append(linkBlock); if (taskObject[2]) {
element.append(linkBlock);
}
if (taskObject[4]) {
element.append(linkDealBlock);
}
element.append(buttonBlock); element.append(buttonBlock);
return element; return element;
} }
...@@ -1747,7 +1791,7 @@ function clearAllNotifications() { ...@@ -1747,7 +1791,7 @@ function clearAllNotifications() {
* Создана ли заметка через нужную форму * Создана ли заметка через нужную форму
*/ */
function isValidTask(taskObject) { function isValidTask(taskObject) {
return taskObject[0] == 'Напоминание!' && taskObject.length == 6; return taskObject[0] == 'Напоминание!' && taskObject.length == 8;
} }
/** /**
...@@ -1771,32 +1815,36 @@ jQuery(document).ready(function () { ...@@ -1771,32 +1815,36 @@ jQuery(document).ready(function () {
var notificationPanel = jQuery("<div class='notification-container'></div>"); var notificationPanel = jQuery("<div class='notification-container'></div>");
var showed = []; var showed = [];
var notShowed = []; var notShowed = [];
var loaded = false;
function addPanel() { function addPanel() {
jQuery("body").append(notificationPanel) if (!loaded) {
notificationPanel.show(function () { loaded = true;
loadTasks(function (data) { jQuery("body").append(notificationPanel);
clearAllNotifications(); notificationPanel.show(function () {
data.forEach(function (task) { loadTasks(function (data) {
var taskObject = getTaskObjectArray(task.task); clearAllNotifications();
if (isValidTask(taskObject)) { data.forEach(function (task) {
var object = { var taskObject = getTaskObjectArray(task.task);
taskID: task.taskID, if (isValidTask(taskObject)) {
taskObject: taskObject, var object = {
start: task.start, taskID: task.taskID,
task: task.task, taskObject: taskObject,
finish: task.finish start: task.start,
}; task: task.task,
if (isTimeToShow(task.start)) { finish: task.finish
showed.push(object); };
} else { if (isTimeToShow(task.start)) {
notShowed.push(object); showed.push(object);
} else {
notShowed.push(object);
}
} }
} });
checkTimeInArray();
showNotify();
}); });
checkTimeInArray();
showNotify();
}); });
}); }
} }
//Иконка колокольчика //Иконка колокольчика
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment