public List<DailyAttendanceReportViewModel> GetDataForDailyAttendanceReport(int departmentId, DateTime date, TimeSpan relaxation) { List<DailyAttendanceReportViewModel> lstDailyAttendanceReportViewModel = new List<DailyAttendanceReportViewModel>(); DataTable dtEmployees, dtShifts; DBDataHelper.ConnectionString = ConfigurationManager.ConnectionStrings["CSBiometricAttendance"].ConnectionString; List<SqlParameter> list_params = new List<SqlParameter>() { new SqlParameter("@date", date), new SqlParameter("@departmentId", departmentId) }; ManageLeaves objManageLeave = new ManageLeaves(); TimeSpan tsShortLeave = objManageLeave.GetShortLeaveDuration(); TimeSpan tsHalfLeave = objManageLeave.GetHalfDayLeaveDuration(); try { using (DBDataHelper helper = new DBDataHelper()) { dtEmployees = helper.GetDataTable("spGetEmployeesForDailyAttendanceReportByDeaprtment", SQLTextType.Stored_Proc, list_params); dtShifts = helper.GetDataTable("spGetActiveShift", SQLTextType.Stored_Proc); foreach (DataRow row in dtEmployees.Rows) { DailyAttendanceReportViewModel objDailyAttendanceReportViewModel = new DailyAttendanceReportViewModel(); objDailyAttendanceReportViewModel.EmployeeId = Int32.Parse(row[1].ToString()); objDailyAttendanceReportViewModel.Name = row[0].ToString(); objDailyAttendanceReportViewModel.FirstHalfStartTime = dtShifts.Rows[0]["FirstHalfStart"].ToString(); objDailyAttendanceReportViewModel.SecondHalfEndTime = dtShifts.Rows[0]["SecondHalfEnd"].ToString(); objDailyAttendanceReportViewModel.Relaxation = relaxation.ToString(); objDailyAttendanceReportViewModel.Date = date; if (row[2] != DBNull.Value) //Entry Time is Not Null { objDailyAttendanceReportViewModel.InTime = row[2].ToString(); objDailyAttendanceReportViewModel.OutTime = row[3] == DBNull.Value ? dtShifts.Rows[0]["SecondHalfEnd"].ToString() : row[3].ToString(); if (row[3] != DBNull.Value) objDailyAttendanceReportViewModel.Status = Status.Present; //Exit Time is Not Null else objDailyAttendanceReportViewModel.Status = Status.PresentWithNoOutPunch; //Exit Time is Null if (objDailyAttendanceReportViewModel._inTime >= objDailyAttendanceReportViewModel._firstHalfStartTime + relaxation) { ManageLeaves objManageLeaves = new ManageLeaves(); if (objDailyAttendanceReportViewModel._inTime - objDailyAttendanceReportViewModel._firstHalfStartTime >= tsHalfLeave) { // Assigning Half Day Leave objManageLeaves.AssignLeave(objDailyAttendanceReportViewModel.EmployeeId, objDailyAttendanceReportViewModel.Date, (int)LeaveTypes.HDL); objDailyAttendanceReportViewModel.Status = Status.OnHalfDayLeave; } else if (objDailyAttendanceReportViewModel._inTime - objDailyAttendanceReportViewModel._firstHalfStartTime >= tsShortLeave) { // Assigning Short Leave objManageLeaves.AssignLeave(objDailyAttendanceReportViewModel.EmployeeId, objDailyAttendanceReportViewModel.Date, (int)LeaveTypes.SHL); objDailyAttendanceReportViewModel.Status = Status.OnShortLeave; } else objDailyAttendanceReportViewModel.Status = Status.Late; objDailyAttendanceReportViewModel.LateByDuration = (objDailyAttendanceReportViewModel._firstHalfStartTime < objDailyAttendanceReportViewModel._inTime) ? (objDailyAttendanceReportViewModel._inTime - objDailyAttendanceReportViewModel._firstHalfStartTime).Duration() : TimeSpan.Parse("00:00:00"); } objDailyAttendanceReportViewModel.EarlyGoingByDuration = (objDailyAttendanceReportViewModel._inTime.TimeOfDay > TimeSpan.Parse("00:00:00")) ? ((objDailyAttendanceReportViewModel._secondHalfEndTime > objDailyAttendanceReportViewModel._outTime) ? (objDailyAttendanceReportViewModel._secondHalfEndTime - objDailyAttendanceReportViewModel._outTime).Duration() : TimeSpan.Parse("00:00:00")) : TimeSpan.Parse("00:00:00"); objDailyAttendanceReportViewModel.Duration = GetTotalTime(objDailyAttendanceReportViewModel.EmployeeId, date);// Exit time null waali if (TimeSpan.Parse(objDailyAttendanceReportViewModel.TotalDuration) > new TimeSpan(0, 0, 0)) // Iterartes only if emp is Present objDailyAttendanceReportViewModel.PunchRecords = GetPunchRecords(objDailyAttendanceReportViewModel.EmployeeId, date); else objDailyAttendanceReportViewModel.PunchRecords = "No Punch Records"; //Employee is Absent TimeSpan totalShiftDuration = objDailyAttendanceReportViewModel._secondHalfEndTime - objDailyAttendanceReportViewModel._firstHalfStartTime; if (TimeSpan.Parse(objDailyAttendanceReportViewModel.TotalDuration) == new TimeSpan(0, 0, 0)) { objDailyAttendanceReportViewModel.Status = Status.Absent; } else if (totalShiftDuration - objDailyAttendanceReportViewModel.Duration >= tsHalfLeave) { ManageLeaves objManageLeaves = new ManageLeaves(); // Remove short leave and assign Half leave if any short leave exists objManageLeaves.AssignHalfDayLeaveRemovingShortDayLeave(objDailyAttendanceReportViewModel.EmployeeId, date); objDailyAttendanceReportViewModel.Status = Status.OnHalfDayLeaveFirstHalf; } } else { objDailyAttendanceReportViewModel.InTime = "00:00:00.0000000"; objDailyAttendanceReportViewModel.OutTime = "00:00:00.0000000"; ManageLeaves objManageLeaves = new ManageLeaves(); int TypeOfLeave;// For the type of leave if (objManageLeaves.IsEmployeeOnLeave(objDailyAttendanceReportViewModel.EmployeeId, date, out TypeOfLeave)) { objDailyAttendanceReportViewModel.Status = (Status)TypeOfLeave; } else objDailyAttendanceReportViewModel.Status = Status.Absent; // If no leave is there then Absent objDailyAttendanceReportViewModel.Duration = new TimeSpan(0, 0, 0); objDailyAttendanceReportViewModel.PunchRecords = "No Punch Records"; //Employee is Absent } lstDailyAttendanceReportViewModel.Add(objDailyAttendanceReportViewModel); } } } catch (Exception) { // } return lstDailyAttendanceReportViewModel; }
public DailyAttendanceReportViewModel GetDataForReportEmployeeWise(int employeeId, DateTime date, TimeSpan relaxation) { DataTable dtEmployees; DBDataHelper.ConnectionString = ConfigurationManager.ConnectionStrings["CSBiometricAttendance"].ConnectionString; TimeSpan duration = GetDurationOfEmployeeDateWise(employeeId, date); List<SqlParameter> list_params = new List<SqlParameter>() { new SqlParameter("@date", date), new SqlParameter("@employeeId", employeeId) }; MasterShifts objShift = GetShiftForEmployeeDateWise(employeeId, date); //Getting Shift Active as per Employee ManageLeaves objManageLeaves = new ManageLeaves(); TimeSpan ShortLeaveDuration = objShift.SHLDuration; TimeSpan HalfLeaveDuration = new TimeSpan(4, 0, 0); //Change According TimeSpan totalDuration = new DateTime(1, 1, 1, objShift.SecondHalfEnd.Hours, objShift.SecondHalfEnd.Minutes, objShift.SecondHalfEnd.Seconds) - new DateTime(1, 1, 1, objShift.FirstHalfStart.Hours, objShift.FirstHalfStart.Minutes, objShift.FirstHalfStart.Seconds); DayStatus dayStatus = GetStatusOfDayEmployeeWise(date, employeeId); DailyAttendanceReportViewModel objDailyAttendanceReportViewModel = new DailyAttendanceReportViewModel(); int typeOfLeave;// For the type of leave #region Generate Data try { using (DBDataHelper helper = new DBDataHelper()) { dtEmployees = helper.GetDataTable("spGetEmployeesForDailyAttendanceReportByEmployeeId", SQLTextType.Stored_Proc, list_params); foreach (DataRow row in dtEmployees.Rows) { objDailyAttendanceReportViewModel.EmployeeId = Int32.Parse(row[1].ToString()); objDailyAttendanceReportViewModel.Name = row[0].ToString(); objDailyAttendanceReportViewModel.FirstHalfStartTime = objShift.FirstHalfStart.ToString(); objDailyAttendanceReportViewModel.FirstHalfEndTime = objShift.FirstHalfEnd.ToString(); objDailyAttendanceReportViewModel.SecondHalfStartTime = objShift.SecondHalfStart.ToString(); objDailyAttendanceReportViewModel.SecondHalfEndTime = objShift.SecondHalfEnd.ToString(); objDailyAttendanceReportViewModel.Relaxation = relaxation.ToString(); objDailyAttendanceReportViewModel.Date = date; objDailyAttendanceReportViewModel.Duration = duration; #region If Present if (row[2] != DBNull.Value) //Entry Time is Not Null ---- Employee is Present { TimeSpan empEntryTime = TimeSpan.Parse("00:" + row[2].ToString()); TimeSpan empExitTime = row[3] == DBNull.Value ? new TimeSpan() : TimeSpan.Parse("00:" + row[3].ToString()); var bnm = (DateTime.Parse(objDailyAttendanceReportViewModel.FirstHalfStartTime)).TimeOfDay; if (empEntryTime > (DateTime.Parse(objDailyAttendanceReportViewModel.FirstHalfStartTime)).TimeOfDay + relaxation) { objDailyAttendanceReportViewModel.LateByDuration = empEntryTime - (DateTime.Parse(objDailyAttendanceReportViewModel.FirstHalfStartTime)).TimeOfDay - relaxation; } //objDailyAttendanceReportViewModel.InTime = DateTime objDailyAttendanceReportViewModel.InTime = Convert.ToDateTime(empEntryTime.ToString()).ToString(); objDailyAttendanceReportViewModel.OutTime = row[3] == DBNull.Value ? Convert.ToDateTime(objShift.SecondHalfEnd.ToString()).ToString() : Convert.ToDateTime(empExitTime.ToString()).ToString();//IfExitPunch is Null if (row[3] == DBNull.Value) { if (dayStatus != DayStatus.WeeklyOff) objDailyAttendanceReportViewModel.Status = BAS.Enums.Status.PresentWithNoOutPunch;//Exit Time is Null else objDailyAttendanceReportViewModel.Status = BAS.Enums.Status.WeeklyOffPresentWithNoOutPunch; } else { if (objDailyAttendanceReportViewModel._inTime.TimeOfDay >= relaxation + objShift.FirstHalfStart)// IF Late { if (duration + HalfLeaveDuration <= totalDuration) { objManageLeaves.AssignLeave(employeeId, date, (int)BAS.Enums.LeaveTypes.HDL); objDailyAttendanceReportViewModel.Status = BAS.Enums.Status.OnHalfDayLeaveFirstHalf; } else { objManageLeaves.AssignLeave(employeeId, date, (int)BAS.Enums.LeaveTypes.SHL); objDailyAttendanceReportViewModel.Status = BAS.Enums.Status.OnShortLeave; } } else if (duration + HalfLeaveDuration < duration)// Second Half Leave { objManageLeaves.AssignLeave(employeeId, date, (int)BAS.Enums.LeaveTypes.HDL); objDailyAttendanceReportViewModel.Status = BAS.Enums.Status.OnHalfDayLeaveSecondHalf; } else { if (dayStatus != DayStatus.WeeklyOff) objDailyAttendanceReportViewModel.Status = BAS.Enums.Status.Present; else objDailyAttendanceReportViewModel.Status = BAS.Enums.Status.WeeklyOffPresent; } } // } #endregion #region If Absent else //Entry Time is Null { objDailyAttendanceReportViewModel.InTime = "00:00:00.0000000"; objDailyAttendanceReportViewModel.OutTime = "00:00:00.0000000"; if (dayStatus == DayStatus.Holiday) { objDailyAttendanceReportViewModel.Status = Status.Holiday; } else if (dayStatus == DayStatus.WeeklyOff) { objDailyAttendanceReportViewModel.Status = Status.WeeklyOff; } else if (objManageLeaves.IsEmployeeOnLeave(objDailyAttendanceReportViewModel.EmployeeId, date, out typeOfLeave)) { objDailyAttendanceReportViewModel.Status = (Status)typeOfLeave; } else { objDailyAttendanceReportViewModel.Status = Status.LeaveWithoutPay; } } #endregion } } } catch (Exception) { } #endregion return objDailyAttendanceReportViewModel; }