Code:
ALTER PROCEDURE [dbo].[SpLeaveApprovalSaveNew]
@LeaveApplicationId int,
@LeaveId int,
@EmployeeId int,
@LeaveApprovalFromDate datetime,
@LeaveApprovalToDate datetime,
@LeaveApprovalHalfDay bit,
@LeaveApprovalApplicaitonDate datetime,
@LeaveApprovalDuration numeric(18,2),
@LeaveApprovalDate datetime,
@LeaveApprovalRemark nvarchar(15),
@LeaveApprovalApplicationBy nvarchar(15)
AS
Declare @Status varchar(10)
Declare @Date datetime
Declare @LeaveOnHolidayWeekOff varchar(50)
Declare @ShiftWeekOff varchar(MAX)
Declare @ShiftHolidays varchar(MAX)
Declare @WeekOffDate varchar(max)
Declare @HolidayDate varchar(max)
Declare @ShiftName varchar(max)
Declare @ShiftStartTime varchar(max)
Declare @ShiftEndTime varchar(max)
Declare @ShiftLeave varchar(max)
BEGIN
INSERT INTO LeaveApprovalMaster(LeaveApplicationId,LeaveId,EmployeeId,LeaveApprovalFromDate,LeaveApprovalToDate,LeaveApprovalHalfDay,LeaveApprovalApplicaitonDate,
LeaveApprovalDuration, LeaveApprovalDate,LeaveApprovalRemark,LeaveApprovalApplicationBy)
VALUES(@LeaveApplicationId,@LeaveId,@EmployeeId,@LeaveApprovalFromDate,@LeaveApprovalToDate,@LeaveApprovalHalfDay,
@LeaveApprovalApplicaitonDate,@LeaveApprovalDuration,@LeaveApprovalDate,@LeaveApprovalRemark,@LeaveApprovalApplicationBy)
--Update Status in LeaveApplicationMaster
UPDATE LeaveApplicationMaster SET LeaveApplicationApprovalFlag = 1 WHERE EmployeeId = @EmployeeId
--Select data from shiftallocation
SELECT @ShiftName=M.ShiftName,@ShiftStartTime=M.ShiftStartTime,@ShiftEndTime=M.ShiftEndTime from LeaveApprovalMaster L INNER JOIN ShiftAllocation S ON L.EmployeeId=S.EmployeeId INNER JOIN ShiftMaster M ON S.ShiftId = M.ShiftId
--Insert data in EmployeeTempAttendanceDetail
If Not Exists(Select 1 from EmployeeTempAttendanceDetail where EmployeeId = @EmployeeId and [Date] between CAST (@LeaveApprovalFromDate AS DATETIME) and CAST (@LeaveApprovalToDate AS DATETIME))
BEGIN
While(CAST (@LeaveApprovalFromDate AS DATETIME) <= CAST (@LeaveApprovalToDate AS DATETIME))
BEGIN
--- General Setting if Leave comes on holiday and/or weekoff is true
SET @LeaveOnHolidayWeekOff = (Select 1 from GeneralSetting where Consider_Leave_If_WeeklyOff_Holiday ='true')
IF(@LeaveOnHolidayWeekOff > 0)
BEGIN
SET @Status = 'L'
INSERT INTO EmployeeTempAttendanceDetail(EmployeeId,Date,Status,ShiftName,ShiftStartTime,ShiftEndTime)
VALUES(@EmployeeId,@LeaveApprovalFromDate,@Status,@ShiftName,@ShiftStartTime,@ShiftEndTime)
SET @Status = NULL
SET @LeaveApprovalFromDate = dateadd(day,1,@LeaveApprovalFromDate)
END
ELSE
--- General setting if Leave comes on holiday and/or weekoff is false
SELECT @ShiftWeekOff = ShiftAllocationDate from ShiftAllocation Where ShiftAllocationDate between CAST (@LeaveApprovalFromDate AS DATETIME) and CAST (@LeaveApprovalToDate AS DATETIME) and ShiftId = -1 and ShiftId2 = -1
SELECT @ShiftHolidays = ShiftAllocationDate from ShiftAllocation Where ShiftAllocationDate between CAST (@LeaveApprovalFromDate AS DATETIME) and CAST (@LeaveApprovalToDate AS DATETIME) and ShiftId = -2 and ShiftId2 = -2
IF(@ShiftWeekOff <= @LeaveApprovalFromDate And @ShiftWeekOff >= @LeaveApprovalToDate)
BEGIN
SET @Status = 'L'
INSERT INTO EmployeeTempAttendanceDetail(EmployeeId,Date,Status,ShiftName,ShiftStartTime,ShiftEndTime)
VALUES(@EmployeeId,@LeaveApprovalFromDate,@Status,@ShiftName,@ShiftStartTime,@ShiftEndTime)
SET @Status = NULL
SET @LeaveApprovalFromDate = dateadd(day,1,@LeaveApprovalFromDate)
END
ELSE IF(@ShiftWeekOff = @LeaveApprovalFromDate)
BEGIN
SET @Status='WO'
INSERT INTO EmployeeTempAttendanceDetail(EmployeeId,Date,Status,ShiftName,ShiftStartTime,ShiftEndTime)
VALUES(@EmployeeId,@LeaveApprovalFromDate,@Status,@ShiftName,@ShiftStartTime,@ShiftEndTime)
SET @Status = NULL
SET @LeaveApprovalFromDate = dateadd(day,1,@LeaveApprovalFromDate)
END
ELSE IF(@ShiftHolidays = @LeaveApprovalFromDate)
BEGIN
SET @Status='H'
INSERT INTO EmployeeTempAttendanceDetail(EmployeeId,Date,Status,ShiftName,ShiftStartTime,ShiftEndTime)
VALUES(@EmployeeId,@LeaveApprovalFromDate,@Status,@ShiftName,@ShiftStartTime,@ShiftEndTime)
SET @Status = NULL
SET @LeaveApprovalFromDate = dateadd(day,1,@LeaveApprovalFromDate)
END
END
END
END
Comment