Stored Procedures [dbo].[spClaritySPM]
Properties
PropertyValue
ANSI Nulls OnYes
Quoted Identifier OnYes
Parameters
NameData TypeMax Length (Bytes)
@StartDateTimevarchar(50)50
@EndDateTimevarchar(50)50
@UserIDvarchar(50)50
@ProjectIDvarchar(50)50
@TaskIDvarchar(50)50
@GMTOffsetsmallint2
Permissions
TypeActionOwning Principal
GrantExecuteServiceDesk
SQL Script

-- =============================================
-- Author:        Joseph Hurley
-- Create date: 2010/02/08
-- Description:    Procedure to generate results for the Clarity GEL script.
-- =============================================
CREATE PROCEDURE [dbo].[spClaritySPM]
    -- Add the parameters for the stored procedure here
    @StartDateTime AS varchar(50) = '2000/01/01 00:00:00'
    ,@EndDateTime AS varchar(50) = '2100/01/01 23:59:59'
    ,@UserID AS varchar(50) = '0'
    ,@ProjectID AS varchar(50) = '0'
    ,@TaskID AS varchar(50) = '0'
    ,@GMTOffset AS smallInt = '0'
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

DECLARE @RunTime AS Int


SET @StartDateTime = CAST(@StartDateTime As DateTime)
SET @EndDateTime = CAST(@EndDateTime As DateTime)

SET @RunTime = datediff(second, {d '1970-01-01'}, GetutcDate())

UPDATE act_log
SET zClarityLastSync = @RunTime
WHERE act_log.analyst IN (SELECT contact_uuid FROM ca_contact WHERE userid = @UserID)
AND ((act_log.time_stamp + (@GMTOffset * 3600)) BETWEEN datediff(second, {d '1970-01-01'}, @StartDateTime) AND datediff(second, {d '1970-01-01'}, @EndDateTime))
AND zClarityLastSync IS NULL
AND id IN (SELECT     act_log.id
            FROM         call_req INNER JOIN
                      prob_ctg ON call_req.category = prob_ctg.persid INNER JOIN
                      act_log ON call_req.persid = act_log.call_req_id
            WHERE     (prob_ctg.zcl_task_id = @TaskID))



UPDATE chgalg
SET zClarityLastSync = @RunTime
WHERE chgalg.analyst IN (SELECT contact_uuid FROM ca_contact WHERE userid = @UserID) AND ((chgalg.time_stamp + (@GMTOffset * 3600)) BETWEEN datediff(second, {d '1970-01-01'}, @StartDateTime) AND datediff(second, {d '1970-01-01'}, @EndDateTime))
AND zClarityLastSync IS NULL
AND ID IN (SELECT DISTINCT chgalg.id
            FROM         chg INNER JOIN
                      chgcat AS chgcat ON chg.category = chgcat.code INNER JOIN
                      chgalg AS chgalg ON chg.id = chgalg.change_id
            WHERE     (CASE WHEN chg.zcl_task_id IS NULL THEN chgcat.zcl_task_id ELSE chg.zcl_task_id END = @TaskID) AND (chgalg.zClarityLastSync IS NULL))


UPDATE wf
SET zClarityLastSync = @RunTime
WHERE assignee IN (SELECT contact_uuid FROM ca_contact WHERE userid = @UserID) AND ((last_mod_dt + (@GMTOffset * 3600)) BETWEEN datediff(second, {d '1970-01-01'}, @StartDateTime) AND datediff(second, {d '1970-01-01'}, @EndDateTime))
AND wf.id IN (SELECT DISTINCT wf.id
FROM         chg INNER JOIN
                      chgcat AS chgcat ON chg.category = chgcat.code INNER JOIN
                      wf ON chg.id = wf.object_id
WHERE     (wf.object_type = N'chg') AND (CASE WHEN chg.zcl_task_id IS NULL THEN chgcat.zcl_task_id ELSE chg.zcl_task_id END = @TaskID) AND
                      (wf.zClarityLastSync IS NULL) OR
                      (wf.object_type = N'chg') AND (CASE WHEN chg.zcl_task_id IS NULL THEN chgcat.zcl_task_id ELSE chg.zcl_task_id END = @TaskID) AND
                      ISNULL(wf.actual_duration,0) - ISNULL(wf.zClarityTime, 0) <> 0)



DECLARE @tblOutput TABLE
(
    TotalTime decimal(10,4),
    UserID varchar(50),
    ProjID varchar(50),
    TaskID varchar(50),
    TransactionDate datetime
)


INSERT INTO @tblOutput (TotalTime, UserID, ProjID, TaskID, TransactionDate)
SELECT round(1.0000 * act_log.time_spent/3600,4) AS TotalTime, ca_contact.userid AS UserID, prob_ctg.zcl_proj_id AS ProjID, prob_ctg.zcl_task_id AS TaskID,
CONVERT([datetime], DATEADD(hh,@GMTOffset,(DATEADD(s, act_log.time_stamp, '19700101'))), 111) AS TransactionDate
FROM act_log, call_req, ca_contact, prob_ctg prob_ctg
WHERE act_log.call_req_id = call_req.persid AND act_log.analyst = ca_contact.contact_uuid AND call_req.category = prob_ctg.persid AND
act_log.zClarityLastSync = @RunTime
AND ca_contact.UserID = @UserID AND prob_ctg.zcl_proj_id = @ProjectID AND prob_ctg.zcl_task_id = @TaskID
AND round(1.0000 * act_log.time_spent/3600,4) <> 0

INSERT INTO @tblOutput (TotalTime, UserID, ProjID, TaskID, TransactionDate)
SELECT round(1.0000 * chgalg_1.time_spent/3600,4) AS TotalTime, ca_contact_1.userid AS UserID, CASE WHEN chg.zcl_proj_id IS NOT NULL
THEN chg.zcl_proj_id ELSE chgcat.zcl_proj_id END AS ProjID, CASE WHEN chg.zcl_task_id IS NOT NULL
THEN chg.zcl_task_id ELSE chgcat.zcl_task_id END AS TaskID,
CONVERT([datetime], DATEADD(hh,@GMTOffset,(DATEADD(s, chgalg_1.time_stamp, '19700101'))), 111)
AS TransactionDate
FROM chgalg chgalg_1, chg, chgcat, ca_contact ca_contact_1
WHERE chgalg_1.change_id = chg.id AND chg.category = chgcat.code AND chgalg_1.analyst = ca_contact_1.contact_uuid AND
chgalg_1.zClarityLastSync = @RunTime
AND ca_contact_1.UserID = @UserID AND CASE WHEN chg.zcl_proj_id IS NOT NULL
THEN chg.zcl_proj_id ELSE chgcat.zcl_proj_id END = @ProjectID AND CASE WHEN chg.zcl_task_id IS NOT NULL
THEN chg.zcl_task_id ELSE chgcat.zcl_task_id END = @TaskID
AND round(1.0000 * chgalg_1.time_spent/3600,4) <> 0


INSERT INTO @tblOutput (TotalTime, UserID, ProjID, TaskID, TransactionDate)
SELECT ROUND(1.0000 * (ISNULL(wf.actual_duration, 0) - ISNULL(wf.zClarityTime, 0)), 4) / 3600 AS TotalTime, ca_contact_2.userid AS UserID, CASE WHEN chg_1.zcl_proj_id IS NOT NULL
THEN chg_1.zcl_proj_id ELSE chgcat_1.zcl_proj_id END AS ProjID, CASE WHEN chg_1.zcl_task_id IS NOT NULL
THEN chg_1.zcl_task_id ELSE chgcat_1.zcl_task_id END AS TaskID,
CONVERT([datetime], DATEADD(hh,@GMTOffset,(DATEADD(s, wf.last_mod_dt, '19700101'))), 111)
AS TransactionDate
FROM chg chg_1, chgcat chgcat_1, wf, ca_contact ca_contact_2
WHERE chg_1.category = chgcat_1.code AND chg_1.id = wf.object_id AND wf.assignee = ca_contact_2.contact_uuid AND (wf.object_type = 'chg') AND
wf.zClarityLastSync = @RunTime
AND ca_contact_2.UserID = @UserID AND CASE WHEN chg_1.zcl_proj_id IS NOT NULL
THEN chg_1.zcl_proj_id ELSE chgcat_1.zcl_proj_id END = @ProjectID AND CASE WHEN chg_1.zcl_task_id IS NOT NULL
THEN chg_1.zcl_task_id ELSE chgcat_1.zcl_task_id END = @TaskID
AND (ROUND(1.0000 * (ISNULL(wf.actual_duration, 0) - ISNULL(wf.zClarityTime, 0)), 4) / 3600) <> 0


UPDATE wf
SET zClarityTime = actual_duration
WHERE assignee IN (SELECT contact_uuid FROM ca_contact WHERE userid = @UserID) AND ((last_mod_dt + (@GMTOffset * 3600)) BETWEEN datediff(second, {d '1970-01-01'}, @StartDateTime) AND datediff(second, {d '1970-01-01'}, @EndDateTime))
AND zClarityLastSync = @RunTime


SELECT round(1.0000 * (SUM(TotalTime)),4) AS TotalTime, convert(varchar(10),TransactionDate, 120) AS TransactionDate
FROM @tblOutput
GROUP BY convert(varchar(10),TransactionDate, 120)


END


GO
GRANT EXECUTE ON  [dbo].[spClaritySPM] TO [ServiceDesk]
GO
Uses