/// <summary> /// Method to get leave Updated from slack button response /// </summary> /// <param name="leaveId"></param> /// <param name="status"></param> /// <returns>replyText</returns> public void UpdateLeave(SlashChatUpdateResponse leaveResponse) { // method to get leave by its id var leave = _leaveRepository.LeaveById(leaveResponse.CallbackId); // only pending status can be modified if (leave.Status == Condition.Pending) { if (leaveResponse.Actions.Value == _stringConstant.Approved) { leave.Status = Condition.Approved; } else { leave.Status = Condition.Rejected; } } _leaveRepository.UpdateLeave(leave); replyText = string.Format("You had {0} Leave for {1} From {2} To {3} for Reason {4} will re-join by {5}", leave.Status, leaveResponse.User.Name, leave.FromDate.ToShortDateString(), leave.EndDate.Value.ToShortDateString(), leave.Reason, leave.RejoinDate.Value.ToShortDateString()); _client.UpdateMessage(leaveResponse, replyText); }
public IHttpActionResult SlackButtonRequest(SlashChatUpdateResponse leaveResponse) { try { _slackRepository.UpdateLeave(leaveResponse); return(Ok()); } catch (Exception ex) { var errorMessage = string.Format("{0}. Error -> {1}", _stringConstant.LoggerErrorMessageLeaveRequestControllerSlackButtonRequest, ex.ToString()); _logger.Error(errorMessage, ex); throw; } }
/// <summary> /// The below method use for updating slack message without attachment. /// Required field token, channelId and message_ts which we had get at time of response from slack. /// </summary> /// <param name="leaveResponse">SlashChatUpdateResponse object send from slack</param> /// <param name="replyText">Text to be send to slack</param> public async Task UpdateMessage(SlashChatUpdateResponse leaveResponse, string replyText) { // Call to an url using HttpClient. var responseUrl = string.Format("?token={0}&channel={1}&text={2}&ts={3}&as_user=true&pretty=1", HttpUtility.UrlEncode(leaveResponse.Token), HttpUtility.UrlEncode(leaveResponse.Channel.Id), HttpUtility.UrlEncode(replyText), HttpUtility.UrlEncode(leaveResponse.MessageTs)); var response = await _httpClientRepository.GetAsync(_stringConstant.SlackChatUpdateUrl, responseUrl, leaveResponse.Token); }
/// <summary> /// Method to get leave Updated from slack button response /// </summary> /// <param name="leaveResponse">leave update response from slack</param> public async Task UpdateLeaveAsync(SlashChatUpdateResponse leaveResponse) { try { _logger.Debug("UpdateLeaveAsync Leave update method"); // method to get leave by its id LeaveRequest leave = await _leaveRepository.LeaveByIdAsync(Convert.ToInt32(leaveResponse.CallbackId)); _logger.Debug("UpdateLeaveAsync leave applied by : " + leave.EmployeeId); ApplicationUser user = await _userManagerRepository.FirstOrDefaultAsync(x => x.Id == leave.EmployeeId); _logger.Debug("UpdateLeaveAsync User name : " + user.UserName); SlackUserDetailAc slackUser = await _slackUserRepository.GetByIdAsync(user.SlackUserId); _logger.Debug("UpdateLeaveAsync User slack name : " + slackUser.Name); ApplicationUser updaterUser = await _userManagerRepository.FirstOrDefaultAsync(x => x.SlackUserId == leaveResponse.User.Id); if (updaterUser != null) { _logger.Debug("UpdateLeaveAsync User want to update the leave : " + updaterUser.UserName); // only pending status can be modified if (leave.Status == Condition.Pending) { if (leaveResponse.Actions[0].Value == _stringConstant.Approved) { leave.Status = Condition.Approved; } else { leave.Status = Condition.Rejected; } await _leaveRepository.UpdateLeaveAsync(leave); _logger.Debug("UpdateLeaveAsync leave updated successfully"); _logger.Debug("Leave details : " + leave.ToString()); replyText = string.Format(_stringConstant.CasualLeaveUpdateMessageForUser, leave.Id, leave.FromDate.ToShortDateString(), leave.EndDate.Value.ToShortDateString(), leave.Reason, leave.Status, leaveResponse.User.Name); _logger.Debug("Reply text to user : "******"UpdateLeaveAsync user incoming webhook is null : " + string.IsNullOrEmpty(incomingWebHook.IncomingWebHookUrl)); // Used to send slack message to the user about leave updation _logger.Debug("UpdateLeaveAsync Client repository - UpdateMessageAsync"); await _clientRepository.UpdateMessageAsync(incomingWebHook.IncomingWebHookUrl, replyText); _logger.Debug("Creating Email object"); // Used to send email to the user about leave updation EmailApplication email = new EmailApplication(); email.To = new List <string>(); email.Body = _emailTemplateRepository.EmailServiceTemplateLeaveUpdate(leave); _logger.Debug("Email body is null : " + email.Body); email.From = updaterUser.Email; _logger.Debug("Email from : " + email.From); email.To.Add(user.Email); _logger.Debug("Email from : " + email.To); email.Subject = string.Format(_stringConstant.LeaveUpdateEmailStringFormat, _stringConstant.Leave, leave.Status); replyText = string.Format(_stringConstant.ReplyTextForUpdateLeave, leave.Status, slackUser.Name, leave.FromDate.ToShortDateString(), leave.EndDate.Value.ToShortDateString(), leave.Reason, leave.RejoinDate.Value.ToShortDateString()); _logger.Debug("Reply text to updator : " + replyText); _logger.Debug("UpdateLeaveAsync Email sending"); _emailService.Send(email); _logger.Debug("UpdateLeaveAsync Email successfully send"); } else { _logger.Debug("UpdateLeaveAsync leave already updated"); replyText = string.Format(_stringConstant.AlreadyUpdatedMessage, leave.Status); } } else { replyText = _stringConstant.YouAreNotInExistInOAuthServer; } } catch (SmtpException ex) { replyText += string.Format(_stringConstant.ReplyTextForSMTPExceptionErrorMessage, _stringConstant.ErrorWhileSendingEmail, ex.Message.ToString()); } _logger.Debug("UpdateLeaveAsync Client Repository - SendMessageAsync"); // updating leave applied text of slack await _clientRepository.SendMessageAsync(leaveResponse.ResponseUrl, replyText); }