quote: Originally posted by Peso Post the code of the other procedure, where you handle your transaction. E 12°55'05.63"N 56°04'39.26"
set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgoALTER PROCEDURE [dbo].[USP_Get_Employee_Available_Leave]@Employee_NBR INT,@Leave_Type_NBR INT,@User_NBR INT,@Page_NBR INTASBEGIN SET NOCOUNT ON; BEGIN TRY DECLARE @Error_NBR INT DECLARE @Year_NBR INT DECLARE @Current_DT DATETIME --Check permission SELECT @Error_NBR = [dbo].[FN_Check_Permission] (@User_NBR, @Page_NBR, 'READ') IF (@Error_NBR <> 0 ) BEGIN SELECT Message_NBR, Message_Value FROM TError_Message WHERE Message_NBR = @Error_NBR RETURN END --Get Current date and remove time SET @Current_DT = CONVERT(DATETIME,CONVERT(CHAR(12),GETDATE()),102) --Get Current Year SET @Year_NBR = DATEPART(yy,@current_DT) --Return Available Leaves SELECT e.employee_NBR ,REPLACE(REPLACE(REPLACE(ISNULL(ec.Configuration_Val,e.First_NM + ',' + e.Last_NM),'First_Name',e.First_NM),'Last_Name',e.Last_NM),'Middle_Name',e.Middle_NM) AS Employee_NM ,lt.Leave_Type_NBR ,lt.Leave_Type_NM ,CASE WHEN ((lt.Leave_Type_NM = 'Casual Leave') AND ((DATEADD(mm,lt.Eligible_NBR,e.Join_DT)) < = @current_DT) )-- ((DATEDIFF(mm,e.Join_DT,@current_DT)) >= lt.Eligible_NBR )) THEN CASE WHEN (DATEPART(yy,e.Join_DT) = @Year_NBR ) THEN CASE WHEN DATEPART(dd,e.Join_DT) > 15 THEN ((DATEDIFF(mm,e.Join_DT,@current_DT) * (lt.Days_Per_Year/12.0)) - ISNULL(yela.Cnt,0)) ELSE (((DATEDIFF(mm,e.Join_DT,@current_DT)+1) * (lt.Days_Per_Year/12.0)) - ISNULL(yela.Cnt,0)) END ELSE ((DATEPART(mm,@current_DT) * (lt.Days_Per_Year/12.0)) - ISNULL(yela.Cnt,0)) END WHEN ((lt.Leave_Type_NM = 'Sick Leave') AND ((DATEADD(mm,lt.Eligible_NBR,e.Join_DT)) < = @current_DT) )--((DATEDIFF(mm,e.Join_DT,@current_DT)) >= lt.Eligible_NBR )) THEN CASE WHEN (DATEPART(yy,e.Join_DT) = @Year_NBR ) THEN CASE WHEN DATEPART(dd,e.Join_DT) > 15 THEN ((DATEDIFF(mm,e.Join_DT,@current_DT) * (lt.Days_Per_Year/12.0)) - ISNULL(yela.Cnt,0)) ELSE (((DATEDIFF(mm,e.Join_DT,@current_DT)+1) * (lt.Days_Per_Year/12.0)) - ISNULL(yela.Cnt,0)) END ELSE ((DATEPART(mm,@current_DT) * (lt.Days_Per_Year/12.0)) - ISNULL(yela.Cnt,0)) END WHEN ((lt.Leave_Type_NM = 'Earn Leave') AND ((DATEDIFF(mm,e.Join_DT,@current_DT)) >= lt.Eligible_NBR ) AND ((DATEADD(mm,lt.Eligible_NBR,e.Join_DT)) < = @current_DT) ) THEN CASE WHEN (DATEPART(yy,DATEADD(mm,lt.Eligible_NBR,e.Join_DT)) = @Year_NBR ) THEN (lt.Days_Per_Year - ISNULL(yela.Cnt,0)) ELSE ((ISNULL(elb.Leave_Balance,0) + lt.Days_Per_Year) - ISNULL(yela.Cnt,0)) END WHEN (lt.Leave_Type_NM = 'Compensatory Off') THEN CASE WHEN (DATEPART(yy,e.Join_DT) = @Year_NBR ) THEN ISNULL(ycoa.Cnt,0) - ISNULL(yela.Cnt,0) ELSE ISNULL(elb.Leave_Balance,0) + ISNULL(ycoa.Cnt,0) - ISNULL(yela.Cnt,0) END ELSE CASE WHEN lt.Leave_Type_NM NOT IN ('Casual Leave','Sick Leave','Earn Leave','Compensatory Off','Marriage Leave','Maternity Leave','Paternal Leave') THEN CASE WHEN ( ISNULL(lt.Days_Per_Year,0) != 0 AND lt.Carry_Forward_FG = 0 AND ((DATEADD(mm,lt.Eligible_NBR,e.Join_DT)) < = @current_DT) )--((DATEDIFF(mm,e.Join_DT,@current_DT)) >= lt.Eligible_NBR )) THEN CASE WHEN e.Join_DT > lt.Effective_DT THEN CASE WHEN (DATEPART(yy,e.Join_DT) = @Year_NBR ) THEN CASE WHEN DATEPART(dd,e.Join_DT) > 15 THEN ((DATEDIFF(mm,e.Join_DT,@current_DT) * (lt.Days_Per_Year/12.0)) - ISNULL(yela.Cnt,0)) ELSE (((DATEDIFF(mm,e.Join_DT,@current_DT) + 1) * (lt.Days_Per_Year/12.0)) - ISNULL(yela.Cnt,0)) END ELSE (DATEPART(mm,@current_DT) * (lt.Days_Per_Year/12.0)) - ISNULL(yela.Cnt,0) END ELSE CASE WHEN (DATEPART(yy,lt.Effective_DT) = @Year_NBR ) THEN CASE WHEN DATEPART(dd,lt.Effective_DT) > 15 THEN ((DATEDIFF(mm,lt.Effective_DT,@current_DT) * (lt.Days_Per_Year/12.0)) - ISNULL(yela.Cnt,0)) ELSE (((DATEDIFF(mm,lt.Effective_DT,@current_DT) + 1) * (lt.Days_Per_Year/12.0)) - ISNULL(yela.Cnt,0)) END ELSE (DATEPART(mm,@current_DT) * (lt.Days_Per_Year/12.0)) - ISNULL(yela.Cnt,0) END END WHEN ( ISNULL(lt.Days_Per_Year,0) != 0 AND lt.Carry_Forward_FG = 1 AND ((DATEADD(mm,lt.Eligible_NBR,e.Join_DT)) < = @current_DT) )--((DATEDIFF(mm,e.Join_DT,@current_DT)) >= lt.Eligible_NBR )) THEN CASE WHEN e.Join_DT > lt.Effective_DT THEN CASE WHEN (DATEPART(yy,e.Join_DT) = @Year_NBR ) THEN CASE WHEN DATEPART(dd,e.Join_DT) > 15 THEN ((DATEDIFF(mm,e.Join_DT,@current_DT) * (lt.Days_Per_Year/12.0)) - ISNULL(yela.Cnt,0)) ELSE (((DATEDIFF(mm,e.Join_DT,@current_DT) + 1) * (lt.Days_Per_Year/12.0)) - ISNULL(yela.Cnt,0)) END ELSE ISNULL(elb.Leave_Balance,0) + (DATEPART(mm,@current_DT) * (lt.Days_Per_Year/12.0)) - ISNULL(yela.Cnt,0) END ELSE CASE WHEN (DATEPART(yy,lt.Effective_DT) = @Year_NBR ) THEN CASE WHEN DATEPART(dd,lt.Effective_DT) > 15 THEN ((DATEDIFF(mm,lt.Effective_DT,@current_DT) * (lt.Days_Per_Year/12.0)) - ISNULL(yela.Cnt,0)) ELSE (((DATEDIFF(mm,lt.Effective_DT,@current_DT) + 1) * (lt.Days_Per_Year/12.0)) - ISNULL(yela.Cnt,0)) END ELSE ISNULL(elb.Leave_Balance,0) + (DATEPART(mm,@current_DT) * (lt.Days_Per_Year/12.0)) - ISNULL(yela.Cnt,0) END END WHEN ( ISNULL(lt.Days_Per_Year,0) = 0 AND lt.Carry_Forward_FG = 0 AND ((DATEADD(mm,lt.Eligible_NBR,e.Join_DT)) < = @current_DT) )--((DATEDIFF(mm,e.Join_DT,@current_DT)) >= lt.Eligible_NBR )) THEN CASE WHEN e.Join_DT > lt.Effective_DT THEN CASE WHEN (DATEPART(yy,e.Join_DT) = @Year_NBR ) THEN (lt.Max_At_Time - ISNULL(ela.Cnt,0)) ELSE 0.00 END ELSE CASE WHEN (DATEPART(yy,lt.Effective_DT) = @Year_NBR ) THEN (lt.Max_At_Time - ISNULL(ela.Cnt,0)) ELSE 0.00 END END WHEN ( ISNULL(lt.Days_Per_Year,0) = 0 AND lt.Carry_Forward_FG = 1 AND ((DATEADD(mm,lt.Eligible_NBR,e.Join_DT)) < = @current_DT) )--((DATEDIFF(mm,e.Join_DT,@current_DT)) >= lt.Eligible_NBR )) THEN CASE WHEN e.Join_DT > lt.Effective_DT THEN CASE WHEN (DATEPART(yy,e.Join_DT) = @Year_NBR ) THEN (lt.Max_At_Time - ISNULL(ela.Cnt,0)) ELSE (ISNULL(elb.Leave_Balance,0) - ISNULL(ela.Cnt,0)) END ELSE CASE WHEN (DATEPART(yy,lt.Effective_DT) = @Year_NBR ) THEN (lt.Max_At_Time - ISNULL(ela.Cnt,0)) ELSE (ISNULL(elb.Leave_Balance,0) - ISNULL(ela.Cnt,0)) END END ELSE 0.00 END END END Available_Leave FROM TEmployee (NOLOCK) e LEFT JOIN TEmployee_Info (NOLOCK) ei ON e.Employee_NBR = ei.Employee_NBR INNER JOIN TLeave_Type (NOLOCK) lt ON 1 = 1 AND @Current_DT > = lt.Effective_DT LEFT JOIN TEmployee_Leave_Balance (NOLOCK) elb ON e.Employee_NBR = elb.Employee_NBR AND lt.Leave_Type_NBR = elb.Leave_Type_NBR AND @Year_NBR = elb.Year_NBR LEFT JOIN (SELECT ela.Employee_NBR ,ela.Leave_Type_NBR ,DATEPART(yy,ela.From_DT) AS Year_NBR ,SUM(ela.Days_NBR) AS Cnt FROM TEmployee_Leave_Application (NOLOCK) ela INNER JOIN TLeave_Type (NOLOCK) lt ON lt.Leave_Type_NBR = ela.Leave_Type_NBR INNER JOIN TStatus (NOLOCK) s ON ela.Status_NBR = s.Status_NBR WHERE ela.From_DT >= lt.Effective_DT -- AND ISNULL(lt.Days_Per_Year,0) != 0 AND s.Status_NM IN ('Applied','Availed','Approved by Supervisor','Approved by HR') GROUP BY ela.Employee_NBR,ela.Leave_Type_NBR,DATEPART(yy,ela.From_DT) )yela ON e.Employee_NBR = yela.Employee_NBR AND lt.Leave_Type_NBR = yela.Leave_Type_NBR AND @Year_NBR = yela.Year_NBR LEFT JOIN (SELECT ela.Employee_NBR ,ela.Leave_Type_NBR ,COUNT(1) AS Number ,SUM(ela.Days_NBR) AS Cnt FROM TEmployee_Leave_Application (NOLOCK) ela INNER JOIN TLeave_Type (NOLOCK) lt ON lt.Leave_Type_NBR = ela.Leave_Type_NBR INNER JOIN TStatus (NOLOCK) s ON ela.Status_NBR = s.Status_NBR WHERE ela.From_DT >= lt.Effective_DT -- AND ISNULL(lt.Days_Per_Year,0) = 0 AND s.Status_NM IN ('Applied','Availed','Approved by Supervisor','Approved by HR') GROUP BY ela.Employee_NBR,ela.Leave_Type_NBR )ela ON e.Employee_NBR = ela.Employee_NBR AND lt.Leave_Type_NBR = ela.Leave_Type_NBR LEFT JOIN (SELECT coa.Employee_NBR ,lt.Leave_Type_NBR ,DATEPART(yy,coa.Applied_DT) AS Year_NBR ,SUM(CASE WHEN Halfday_FG = 1 THEN 0.5 ELSE 1.0 END) AS Cnt FROM TCompensation_Off_Application (NOLOCK) coa INNER JOIN TLeave_Type (NOLOCK) lt ON lt.Leave_Type_NM = 'Compensatory Off' INNER JOIN TStatus (NOLOCK) s ON coa.Status_NBR = s.Status_NBR WHERE coa.Applied_DT >= lt.Effective_DT -- AND ISNULL(lt.Days_Per_Year,0) = 0 AND s.Status_NM IN ('Availed','Approved by HR') GROUP BY coa.Employee_NBR,lt.Leave_Type_NBR,DATEPART(yy,coa.Applied_DT) )ycoa ON e.Employee_NBR = ycoa.Employee_NBR AND lt.Leave_Type_NBR = ycoa.Leave_Type_NBR AND @Year_NBR = ycoa.Year_NBR LEFT JOIN (SELECT cv.Configuration_Val FROM TConfiguration (NOLOCK) c INNER JOIN TConfiguration_VAlue (NOLOCK) cv ON c.Configuration_NBR = cv.Configuration_NBR WHERE c.Configuration_NM = 'Employee Name' AND c.Active_FG = 0 AND cv.Active_FG = 0 )ec ON 1=1 WHERE (e.Employee_NBR = @Employee_NBR OR @Employee_NBR = 0) AND (lt.Leave_Type_NBR = @Leave_Type_NBR OR @Leave_Type_NBR = 0 ) AND (lt.Leave_Type_NM != 'Loss of Pay') AND (lt.Active_FG = 0) END TRY BEGIN CATCH DECLARE @ErrorMessage VARCHAR(MAX) DECLARE @ProcedureName VARCHAR(100) DECLARE @Username VARCHAR (50) SET @ErrorMessage = 'Object: ' + Error_Procedure() + 'Error Line Number ' + CONVERT(VARCHAR,ERROR_LINE()) + ': ' + ERROR_MESSAGE() --Write into Error Log table EXEC [dbo].[USP_Insert_Error_Log] @ErrorMessage, @Page_NBR, 'LocalServer', @User_NBR --Return Error Message SELECT Message_NBR, Message_Value FROM TError_Message WHERE Message_NBR = 1 END CATCHEND |