<< Click to Display Table of Contents >> Разработка > Примеры разработки > Разработка модуля и типа документа Шаг 3. Доработка вычисляемой папки в перекрытии модуля |
Чтобы в реестре договоров появилась колонка «Закупки» и быстрое действие для создания договора закупки:
1.В контекстном меню решения последовательно выберите пункты Перекрыть, Модуль.
2.В открывшемся окне в выпадающем списке выберите базовый модуль Sungero.ContractsUI.
3.Нажмите на кнопку ОК. Модуль появится в дереве решений в разделе «Перекрытые элементы». Откроется его редактор.
4.В редакторе вашего решения добавьте зависимость от модуля Sungero.ContractsUI. Если зависимости не указаны, при публикации могут возникнуть ошибки.
5.В редакторе перекрытого модуля в узле «Папки» выберите вычисляемую папку «Реестр договоров» (ContractsList).
6.В выпадающем списке Наследники установите флажок для типа документа «Договор закупки» (PurchaseContract). В результате:
•в области Скрытые колонки появится колонка Закупка;
•после публикации в реестре появится быстрое действие для созданий договора закупки.
7.Настройте для папки представление по умолчанию. Для этого переместите колонку Закупка из области Скрытые колонки в табличную часть.
СОВЕТ. Чтобы изменить порядок отображения колонок в содержимом папки, переместите их заголовки в табличной части.
Чтобы доработать панель фильтрации для вычисляемой папки «Реестр договоров»:
1.В узле ContractsList выберите элемент «FilterPanel».
2.Выделите группу Типы документов (DocumentTypeGroup) и добавьте флажок Договоры закупки (PurchaseContracts).
ПРИМЕЧАНИЕ. В примере к имени флажка автоматически добавляется постфикс с кодом компании (DEV), так как при установке среды разработки был установлен флажок Уникальные имена при перекрытии.
3.В параметрах установите флажок Выделен по умолчанию. Результат настройки панели фильтрации будет отображаться в области предпросмотра.
4.Вернитесь в узел ContractsList и задайте условие для фильтрации договоров по соответствующей заявке. Для этого установите флажок рядом с событием Получение данных и перейдите по ссылке. В открывшемся редакторе напишите код:
public override IQueryable<Sungero.Contracts.IContractualDocument> ContractsListDataQuery(IQueryable<Sungero.Contracts.IContractualDocument> query)
{
if (_filter == null)
return query.Where(d => Sungero.Contracts.Contracts.Is(d) || Sungero.Contracts.SupAgreements.Is(d) || Purchases.PurchaseContracts.Is(d));
#region Фильтры
// Фильтр по состоянию.
var statuses = new List<Enumeration>();
if (_filter.Draft)
statuses.Add(Sungero.Contracts.ContractBase.LifeCycleState.Draft);
if (_filter.Active)
statuses.Add(Sungero.Contracts.ContractBase.LifeCycleState.Active);
if (_filter.Executed)
statuses.Add(Sungero.Contracts.ContractBase.LifeCycleState.Closed);
if (_filter.Terminated)
statuses.Add(Sungero.Contracts.ContractBase.LifeCycleState.Terminated);
if (_filter.Cancelled)
statuses.Add(Sungero.Contracts.ContractBase.LifeCycleState.Obsolete);
// Фильтр по состоянию.
if (statuses.Any())
query = query.Where(q => q.LifeCycleState != null && statuses.Contains(q.LifeCycleState.Value));
// Фильтр "Вид документа".
if (_filter.DocumentKind != null)
query = query.Where(c => Equals(c.DocumentKind, _filter.DocumentKind));
// Фильтр "Категория".
if (_filter.Category != null)
query = query.Where(c => Sungero.Contracts.Contracts.Is(c) && Equals(c.DocumentGroup, _filter.Category));
// Фильтр "Контрагент".
if (_filter.Contractor != null)
query = query.Where(c => Equals(c.Counterparty, _filter.Contractor));
// Фильтр "Наша организация".
if (_filter.BusinessUnit != null)
query = query.Where(c => Equals(c.BusinessUnit, _filter.BusinessUnit));
// Фильтр "Подразделение".
if (_filter.Department != null)
query = query.Where(c => Equals(c.Department, _filter.Department));
#region Фильтрация по дате договора
var beginDate = Calendar.UserToday.AddDays(-30);
var endDate = Calendar.UserToday;
if (_filter.Last365days)
beginDate = Calendar.UserToday.AddDays(-365);
if (_filter.ManualPeriod)
{
beginDate = _filter.DateRangeFrom ?? Calendar.SqlMinValue;
endDate = _filter.DateRangeTo ?? Calendar.SqlMaxValue;
}
var serverPeriodBegin = Equals(Calendar.SqlMinValue, beginDate) ? beginDate : Sungero.Docflow.PublicFunctions.Module.Remote.GetTenantDateTimeFromUserDay(beginDate);
var serverPeriodEnd = Equals(Calendar.SqlMaxValue, endDate) ? endDate : endDate.EndOfDay().FromUserTime();
var clientPeriodEnd = !Equals(Calendar.SqlMaxValue, endDate) ? endDate.AddDays(1) : Calendar.SqlMaxValue;
query = query.Where(j => (j.DocumentDate.Between(serverPeriodBegin, serverPeriodEnd) ||
j.DocumentDate == beginDate) && j.DocumentDate != clientPeriodEnd);
#endregion
// Фильтр по типу документа.
if (!(_filter.Contracts == true && _filter.SupAgreements == true && _filter.PurchaseContractDEV == true) || !(_filter.Contracts == false && _filter.SupAgreements == false && _filter.PurchaseContractDEV == false))
{
if (_filter.Contracts)
query = query.Where(d => Sungero.Contracts.Contracts.Is(d));
if (_filter.SupAgreements)
query = query.Where(d => Sungero.Contracts.SupAgreements.Is(d));
if (_filter.PurchaseContractDEV)
query = query.Where(d => Purchases.PurchaseContracts.Is(d));
}
else
query = query.Where(d => Sungero.Contracts.ContractBases.Is(d) || Sungero.Contracts.SupAgreements.Is(d) || Purchases.PurchaseContracts.Is(d));
#endregion
return query;
}
В результате после публикации реестр договоров будет выглядеть следующим образом:
© Компания Directum, 2024 |