public async Task <IActionResult> UpdateStaffLeaveAsync([FromBody] UpdateStaffLeaveAc updateStaffLeave) { var instituteId = await GetUserCurrentSelectedInstituteIdAsync(); ApplicationUser currentUser = await _userManager.FindByNameAsync(User.Identity.Name); return(Ok(await _leaveManagementRepository.UpdateStaffLeaveAsync(updateStaffLeave, instituteId, currentUser))); }
/// <summary> /// Method to update applied Staff leave - SS /// </summary> /// <param name="updateStaffLeave">leave detail</param> /// <param name="instituteId">institute id</param> /// <returns>response</returns> public async Task <StaffLeaveResponse> UpdateStaffLeaveAsync(UpdateStaffLeaveAc updateStaffLeave, int instituteId, ApplicationUser currentUser) { if (string.IsNullOrEmpty(updateStaffLeave.Reason.Trim())) { return new StaffLeaveResponse() { HasError = true, Message = "Leave reason can't be empty", ErrorType = StaffLeaveResponseType.Reason } } ; else { if (!await _iMSDbContext.StaffBasicPersonalInformation.AnyAsync(x => x.Id == updateStaffLeave.StaffId && x.InstituteId == instituteId)) { return new StaffLeaveResponse() { HasError = true, Message = "Staff not found", ErrorType = StaffLeaveResponseType.StaffId } } ; else { if (!await _iMSDbContext.LeaveTypes.AnyAsync(x => x.Id == updateStaffLeave.LeaveTypeId && x.InstituteId == instituteId)) { return new StaffLeaveResponse() { HasError = true, Message = "Leave type not found", ErrorType = StaffLeaveResponseType.LeaveTypeId } } ; else { if (!await _iMSDbContext.LeaveStatuses.AnyAsync(x => x.Id == updateStaffLeave.StatusId && x.InstituteId == instituteId)) { return new StaffLeaveResponse() { HasError = true, Message = "Status not found", ErrorType = StaffLeaveResponseType.StatusId } } ; else { if (!await _iMSDbContext.UserInstituteMappings.AnyAsync(x => x.UserId == updateStaffLeave.ApprovedById && x.InstituteId == instituteId)) { return new StaffLeaveResponse() { HasError = true, Message = "Staff not found", ErrorType = StaffLeaveResponseType.ApprovedById } } ; else { var leave = await _iMSDbContext.StaffLeaves.FirstOrDefaultAsync(x => x.Id == updateStaffLeave.Id && x.Staff.InstituteId == instituteId); if (leave == null) { return new StaffLeaveResponse() { HasError = true, Message = "Leave not found", ErrorType = StaffLeaveResponseType.Id } } ; else { leave.EndDate = updateStaffLeave.EndDate; leave.FromDate = updateStaffLeave.FromDate; leave.LeaveTypeId = updateStaffLeave.LeaveTypeId; leave.Reason = updateStaffLeave.Reason; _iMSDbContext.StaffLeaves.Update(leave); await _iMSDbContext.SaveChangesAsync(); #region Send Mail/Message leave = await _iMSDbContext.StaffLeaves.Include(s => s.Staff).Include(s => s.LeaveType) .Include(s => s.LeaveStatus).Include(s => s.ApprovedBy).FirstAsync(x => x.Id == leave.Id); await _templateManagementRepository.TriggerMailOrMessageAsync(instituteId, TemplateTypeEnum.StaffLeaveEdit, TemplateFormatEnum.Email, leave); await _templateManagementRepository.TriggerMailOrMessageAsync(instituteId, TemplateTypeEnum.StaffLeaveEdit, TemplateFormatEnum.Sms, leave); #endregion await SendBellNotificationsForStaffssLeavesAsync(currentUser, leave.LeaveTypeId, leave.StaffId, instituteId); return(new StaffLeaveResponse() { HasError = false, Message = "Applied leave updated succesfully" }); } } } } } } }