Иерархия строится по трем категориям: Подразделения, Вакансии (содержит ДП "Подразделение") и Анкеты кандидатов (содержит ДП "Вакансия"). Для иерархии настроен фильтр, который отбирает вакансии, которые относятся к выбранному региональному филиалу и должны быть закрыты в выбранный период времени.
Если для иерархии задан номер корневой задачи, то процедура отбора возвращает данные по одному подразделению, чей номер (ID задачи) передается в параметре RootTaskID. Если номер корневой задачи не задан, то строится иерархия по всем подразделениям.
ALTER PROCEDURE [dbo].[cv]
(
@TaskId int = null,
@RootTaskId int = null,
@SessionUserId int,
@XmlParam xml = null,
@OnlyOneRow bit = 0,
@DataType varchar (20) = 'GetChilds'
)
AS
BEGIN
SET NOCOUNT ON;
-- параметры из фильтра (используются для отбора вакансий по сроку, к которому необходимо найти сотрудника)
declare @StartDate date = null, @EndDate date = null
declare @Params table ([Name] varchar(max), [From] varchar(max), [To] varchar(max), [Value] varchar(max))
insert into @Params ([Name], [From], [To], [Value])
exec crm_repGetParams @XML = @XmlParam
select @StartDate = cast([From] as varchar(max)), @EndDate = cast([To] as varchar(max))
from @Params where Name = 'Period'
-- данные
CREATE TABLE #t (ParentId int, Id int, TaskText text, IsEncrypted bit, HasChildren bit, Icon text, Duedate datetime, TaskStatus text, Style text)
-- подразделение, категория 11
INSERT INTO #t (ParentId, Id, TaskText, IsEncrypted, HasChildren, Icon, Duedate, TaskStatus, Style)
SELECT null, t.TaskID, t.TaskText,
t.IsEncrypted,
cast(IsNull((select top 1 1 from dbo.TasksInSubcat22Denormalized as p
where t.TaskID = p.ExtParam21NativeValue), 0) as bit),
'../img/insert.gif',
null, t.StateName, ''
FROM dbo.TasksInSubcat11Denormalized t
WHERE t.IsClosed = 0
AND (t.TaskId = @RootTaskId or @RootTaskId is null) -- по одному подразделению или по всем
AND @TaskId is null; -- смотреть подразделения только на первой итерации
-- вакансии, категория 22, содержит ДП "Подраздление" с ID=21
INSERT INTO #t (ParentId, Id, TaskText, IsEncrypted, HasChildren, Icon, Duedate, TaskStatus, Style)
SELECT @TaskID, t.TaskID, t.TaskText,
t.IsEncrypted,
cast(isnull((select top 1 1 from dbo.TasksInSubcat33Denormalized as p
where t.TaskId = p.ExtParam32NativeValue), 0) as bit),
'../img/new.gif',
t.OrderedTime, t.StateName,
case when t.IsClosed = 1 then 'task-state task-closed' else '' end
FROM dbo.TasksInSubcat22Denormalized t
WHERE (t.ExtParam21NativeValue = @TaskId)
AND ((t.OrderedTime >= @StartDate) OR (@StartDate is null))
AND ((t.OrderedTime <= @EndDate) OR (@EndDate is null));
-- анкеты, категория 33, содержит ДП "Вакансия" с ID=32
INSERT INTO #t (ParentId, Id, TaskText, IsEncrypted, HasChildren, Icon, Duedate, TaskStatus, Style)
SELECT @TaskID, t.TaskID, t.TaskText,
t.IsEncrypted, 0,
'../img/addperf.gif',
t.OrderedTime, t.StateName,
case when t.IsClosed = 1 then 'task-state task-closed' else '' end
FROM dbo.TasksInSubcat33Denormalized t
WHERE (t.ExtParam32NativeValue = @TaskId)
SELECT ParentId, Id, TaskText, IsEncrypted, HasChildren, Icon, Duedate, TaskStatus, Style FROM #t
DROP TABLE #t
END
|