public async Task <BaseResponse> GetAllLeaveRecordofEmployees(EmployeeLeaveRequestByAdmin employeeLeaveRequestByAdmin) { try { var leaveResponse = await _leavesRepository.GetAllLeaveRecordofEmployees(employeeLeaveRequestByAdmin); if (leaveResponse.totalRecords != 0) { _response.Status = true; _response.Message = Constants.DEFAULT_SUCCESS_MSG; _response.data.leaveMainResponse = leaveResponse; } else { _response.Message = Constants.NO_LEAVE_AVAILABLE; } } catch (Exception ex) { _logger.LogError(ex, ex.Message); _response.Status = false; _response.Message = Constants.DEFAULT_ERROR_MSG; } return(_response); }
public async Task <ActionResult> GetAllEmployeeLeaves([FromBody] EmployeeLeaveRequestByAdmin employeeLeaveRequestByAdmin) { try { _response = await _LeavesService.GetAllLeaveRecordofEmployees(employeeLeaveRequestByAdmin); if (_response.Status == false) { _json = JsonConvert.SerializeObject(_response, _serializerSettings); return(BadRequest(_json)); } _json = JsonConvert.SerializeObject(_response, _serializerSettings); return(new OkObjectResult(_json)); } catch (Exception ex) { _response.Message = ex.Message; _response.Status = false; _json = JsonConvert.SerializeObject(_response, _serializerSettings); return(BadRequest(_json)); } }
public async Task <LeaveMainResponse> GetAllLeaveRecordofEmployees(EmployeeLeaveRequestByAdmin employeeLeaveRequestByAdmin) { IQueryable <LeaveResponse> data; IQueryable <LeaveTypeResponse> count; IQueryable <DurationResponse> durationcount; LeaveMainResponse leaveMainResponse = new LeaveMainResponse(); Double monthlyBalance = 0; Double availedLeaves = 0; Double balance = 0; data = from l1 in ObjContext.Leave join GC1 in ObjContext.GlobalCodes on l1.LeaveType equals GC1.GlobalCodeId into gcode1 from gcd1 in gcode1.DefaultIfEmpty() join GC2 in ObjContext.GlobalCodes on l1.RequestStatus equals GC2.GlobalCodeId into gcode2 from gcd2 in gcode2.DefaultIfEmpty() join GC3 in ObjContext.GlobalCodes on l1.Duration equals GC3.GlobalCodeId into gcode3 from gcd3 in gcode3.DefaultIfEmpty() join GC4 in ObjContext.GlobalCodes on l1.RequestStatus equals GC4.GlobalCodeId into gcode4 from gcd4 in gcode4.DefaultIfEmpty() join U in ObjContext.Users on l1.EmployeeId equals U.UserId into US1 from US in US1.DefaultIfEmpty() where l1.IsDeleted == false && l1.IsActive == true //&& gcd4.CodeName == "Pending" //&& (l1.EmployeeId == leaveRequest.EmployeeId) select new LeaveResponse { EmployeeId = l1.EmployeeId, LeaveType = gcd1.CodeName, StartDate = l1.StartDate, Duration = gcd3.CodeName, EndDate = l1.EndDate, NumberOfDays = l1.NumberOfDays, RequestStatus = l1.RequestStatus, PendingLeaves = l1.PendingLeaves, Username = US.UserName, Reason = l1.Reason, LeaveId = l1.LeaveId, Email = US.Email, Status = gcd4.CodeName }; int approved = await GetGlobalCode("Approved"); int pending = await GetGlobalCode("Pending"); if (data != null) { var monthlyJobCount = from leave in ObjContext.Leave where leave.CreatedOn.Month <= DateTime.Now.Month && leave.CreatedOn.Year == DateTime.Now.Year && // leave.EmployeeId == leaveRequest.EmployeeId && leave.RequestStatus == approved group leave by leave.CreatedOn.Month into g select new ResponseMonthlyCount { MonthName = g.First().CreatedOn.Month, TotalLeaves = g.Sum(pc => pc.NumberOfDays), }; foreach (var leave in monthlyJobCount) { monthlyBalance = 1.5 + balance; availedLeaves = leave.TotalLeaves; balance = monthlyBalance - availedLeaves; } if (employeeLeaveRequestByAdmin.OrderByDescending == true) { data = data.OrderByDescending(x => x.GetType().GetProperty(employeeLeaveRequestByAdmin.OrderBy).GetValue(x)); } else { data = data.OrderBy(x => x.GetType().GetProperty(employeeLeaveRequestByAdmin.OrderBy).GetValue(x)); } if (employeeLeaveRequestByAdmin.AllRecords) { leaveMainResponse.leaveResponse = data.ToList(); } else { leaveMainResponse.leaveResponse = data.Skip((employeeLeaveRequestByAdmin.Page - 1) * employeeLeaveRequestByAdmin.Limit).Take(employeeLeaveRequestByAdmin.Limit).ToList(); } if (employeeLeaveRequestByAdmin.PendingLeaves == true) { data = data.Where(l => l.RequestStatus == pending); } if (employeeLeaveRequestByAdmin.ApprovedLeaves == true) { data = data.Where(x => x.RequestStatus == approved); } leaveMainResponse.leaveResponse = await data.ToListAsync(); leaveMainResponse.totalRecords = data.Count(); data = data.Where(x => x.RequestStatus == approved); count = data.GroupBy(x => new { x.LeaveType }).Select(g => new LeaveTypeResponse { LeaveType = g.FirstOrDefault().LeaveType, Count = g.Count() }); durationcount = data.GroupBy(x => new { x.Duration }).Select(g => new DurationResponse { DurationType = g.FirstOrDefault().Duration, Count = g.Count() }); leaveMainResponse.Status = true; leaveMainResponse.monthlyBalance = monthlyBalance; leaveMainResponse.availedLeaves = availedLeaves; leaveMainResponse.balance = balance; leaveMainResponse.leaveTypeResponse = await count.ToListAsync(); leaveMainResponse.durationResponse = await durationcount.ToListAsync(); } return(leaveMainResponse); }