Beispiel #1
0
        /// <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);
        }