Naming Convention:
Stored Procedure Name : pPay_GetData1
Variable to use above stored procedure : fPay1
Advantages:
we can assign multiple earning/deduction values using single stored procedure
Eg:
CREATE PROCEDURE pPay_GetData1 (
@xmlIn AS XML = NULL
,@xmlOut AS XML = NULL OUT
,@Result AS DECIMAL(18, 4) OUT
)
AS
BEGIN
SET NOCOUNT ON;
SET @xmlOut = @xmlIn
DECLARE @EmpId AS VARCHAR(max),@PayrollRefType AS VARCHAR(100)
declare @ToDate as int=0
declare @BonusFromDate as int=0,@BonusToDate as int=0
--Retriving Employee Id
SELECT @EmpId = v.value('iEmpId[1]', 'varchar(max)')
FROM @xmlIn.nodes('/PayrollData') x(v)
--Retriving Payroll Date
SELECT @ToDate = v.value('AsOnDate[1]', 'varchar(max)')
FROM @xmlIn.nodes('/PayrollData') x(v)
select @BonusFromDate=FromDate,@BonusToDate=ToDate from tuPay_BonusDetails where [Date]=(select max([Date]) from tuPay_BonusDetails where [Date]<=@ToDate)
if month(dbo.IntToDate(@BonusToDate)) = month(dbo.IntToDate(@ToDate))
begin
DECLARE @BONUS_ID AS INT = 1018
DECLARE @BONUS AS DECIMAL(18,4)=0
DECLARE @BONUS_DED_ID AS INT = 1036
DECLARE @BONUS_DED AS DECIMAL(18,4)=0
select @BONUS=SUM(ISNULL(pdd.fD6,0))
FROM tPay_Payroll p
INNER JOIN cuPay_PayFrequencyPeriod_Details pfd ON p.iPayFrequencyPeriodId = pfd.iPayFrequencyPeriodId
AND pfd.dToDate>=@BonusFromDate and pfd.dToDate<@BonusToDate
INNER JOIN tuPay_Payroll_Details pd ON p.iTransId = pd.iPayrollId
AND pd.iPayrollRefType = 0
INNER JOIN tuPay_PayrollAttendance_Details a ON pd.iBodyId = a.iPayrollDetailsId and a.iEmpId=@EmpId
AND a.iRevisionId = (
SELECT max(iRevisionId)
FROM tuPay_PayrollAttendance_Details tpd
WHERE tpd.iEmpId = a.iEmpId
AND a.iPayrollDetailsId = tpd.iPayrollDetailsId
)
INNER JOIN tuPay_PayrollEarning_Details ped ON a.iBodyId = ped.iPayrollAttendanceDetailsId
INNER JOIN tuPay_PayrollDeduction_Details pdd ON pdd.iPayrollAttendanceDetailsId = a.iBodyId
--Reading Earning Value
--select @BONUS_DED = v.value('Value[1]','decimal(18,4)') FROM @xmlIn.nodes('/PayrollData/dDedOut/IdValuePairOfDouble[ID/text()=sql:variable("@BONUS_DED_ID")]') x(v)
--set @BONUS = isnull(@BONUS,0) + isnull(@BONUS_DED,0)
--Updating Earning Value
SET @xmlOut.modify('replace value of(/PayrollData/dEarOut/IdValuePairOfDouble[ID = sql:variable("@BONUS_ID")]/Value/text())[1] with sql:variable("@BONUS")')
end
END
Comments
Post a Comment