logo

[ELMA3] Добавление поля карточки контрагента в фильтр сделок

Рассмотрим добавление поля карточки контрагента в фильтр сделок на примере свойства Сегмент рынка объекта Контрагент.

Данное свойство имеет тип Выпадающий список с четырьмя элементами списка: SOHO, Средний бизнес, Бизоны, Enterprise.

В Дизайнере для объекта Сделка добавляем свойство Сегмент рынка типа Выпадающий список. Элементы списка идентичны элементам аналогичного свойства объекта Контрагент. На вкладке Дополнительно устанавливаем флажок Участвует в поиске (фильтре).

Рис. 1. Настройка свойства. Вкладка "Общие"

После этого сохраняем справочник и публикуем его.

Переходим на вкладку Сценарии карточки объекта Сделка.

Если нет сценариев, то необходимо создать новый модуль.

Внимание!
Рекомендуем выносить все сценарии для объектов в отдельный глобальный модуль, т. к. после обновления системы до ELMA4 сценарии работать не будут.

Далее добавляем код. В поле 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. Поле "Сегмент рынка" для расширенного поиска сделок