[ELMA3] Добавление поля карточки контрагента в фильтр сделок
Рассмотрим добавление поля карточки контрагента в фильтр сделок на примере свойства Сегмент рынка объекта Контрагент.
Данное свойство имеет тип Выпадающий список с четырьмя элементами списка: SOHO, Средний бизнес, Бизоны, Enterprise.
В Дизайнере для объекта Сделка добавляем свойство Сегмент рынка типа Выпадающий список. Элементы списка идентичны элементам аналогичного свойства объекта Контрагент. На вкладке Дополнительно устанавливаем флажок Участвует в поиске (фильтре).
Рис. 1. Настройка свойства. Вкладка "Общие"
После этого сохраняем справочник и публикуем его.
Переходим на вкладку Сценарии карточки объекта Сделка.
Если нет сценариев, то необходимо создать новый модуль.
Далее добавляем код. В поле namespace нужно указать модель, в которой будет участвовать код. Ниже представлен пример с EleWise.ELMA.CRM.Models, т. к. используем объект Сделка.
Пространства имён:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EleWise.ELMA.Model.Common;
using EleWise.ELMA.Model.Entities;
using EleWise.ELMA.Model.Managers;
using EleWise.ELMA.Model.Types.Settings;
using EleWise.ELMA.CRM.Models;
using NHibernate;
using EleWise.ELMA.Runtime.NH;
using NHibernate.SqlCommand;
using NHibernate.Criterion;
Текст сценария:
namespace EleWise.ELMA.CRM.Models
{
/// <summary>
/// Модуль сценариев объекта "Сделка"
/// </summary>
public class SaleScripts : EleWise.ELMA.Model.Scripts.Entities.EntityScriptModule<ISaleConfigExt>
{
public class SaleExtManager : EntityExtensionManager<ISale, ISaleConfigExt, long>
{
protected override void OnSetupFilter(ICriteria criteria, IEntityFilter filter)
{
var saleFilter = filter as ISaleConfigExtFilter;
if (saleFilter != null)
{
if (saleFilter.MarketSegment != null)
{
var contractorAlias = "cc";
criteria.GetOrCreateAlias("Contractor", JoinType.InnerJoin, ref contractorAlias);
criteria.Add(Restrictions.Eq(contractorAlias + ".MarketSegment", saleFilter.MarketSegment));
}
}
}
}
}
}
После этого публикуем сценарий и перезапускаем сервер.
В веб-интерфейсе в разделе Сделки в верхнем меню нажимаем на кнопку Изменить фильтр.
Рис. 2. Кнопка "Изменить фильтр"
На вкладке Поля фильтра в блоке Доступные элементы необходимо найти созданное нами новое свойство Сегмент рынка.
Рис. 3. Настройка полей фильтра
Двойным нажатием мыши переносим Сегмент рынка в блок Выбранные элементы, таким образом добавляя его в расширенный поиск по сделкам.
Результат проделанной работы представлен ниже на рисунке.
Рис. 4. Поле "Сегмент рынка" для расширенного поиска сделок