Esempio n. 1
0
        public void GetUserByUsername()
        {
            var response   = Task.FromResult(_stringConstant.UserDetailsFromOauthServer);
            var requestUrl = string.Format("{0}{1}", _stringConstant.UserDetailsUrl, _stringConstant.FirstNameForTest);

            _mockHttpClient.Setup(x => x.GetAsync(_stringConstant.ProjectUserUrl, requestUrl, _stringConstant.AccessTokenForTest)).Returns(response);
            var user = _projectUserRepository.GetUserByUsername(_stringConstant.FirstNameForTest, _stringConstant.AccessTokenForTest).Result;

            Assert.Equal(user.Email, _stringConstant.ManagementEmailForTest);
        }
        /// <summary>
        /// Private method to get reply text and send to team leader and management
        /// </summary>
        /// <param name="username"></param>
        /// <param name="leaveRequest"></param>
        /// <param name="accessToken"></param>
        /// <param name="attachment"></param>
        /// <returns></returns>
        private async Task GetAttachmentAndSendToTLAndManagement(string username, LeaveRequest leaveRequest, string accessToken, List <SlashAttachment> attachment)
        {
            var teamLeaders = await _projectUser.GetTeamLeaderUserName(username, accessToken);

            var management = await _projectUser.GetManagementUserName(accessToken);

            var userDetail = await _projectUser.GetUserByUsername(username, accessToken);

            foreach (var user in management)
            {
                teamLeaders.Add(user);
            }
            foreach (var teamLeader in teamLeaders)
            {
                //Creating an object of SlashIncomingWebhook as this format of value required while responsing to slack
                var text = new SlashIncomingWebhook()
                {
                    Channel = "@" + teamLeader.SlackUserName, Username = _stringConstant.LeaveBot, Attachments = attachment
                };
                var textJson = JsonConvert.SerializeObject(text);
                WebRequestMethod(textJson, _envVariableRepository.IncomingWebHookUrl);
                EmailApplication email = new EmailApplication();
                // creating email templates corresponding to leave applied
                email.Body    = EmailServiceTemplate(leaveRequest);
                email.From    = userDetail.Email;
                email.Subject = _stringConstant.EmailSubject;
                email.To      = teamLeader.Email;
                _email.Send(email);
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Method to apply leave
        /// </summary>
        /// <param name="slackRequest"></param>
        /// <param name="userName"></param>
        /// <returns>leaveRequest</returns>
        private async Task <string> LeaveApply(List <string> slackRequest, SlashCommand leave, string accessToken)
        {
            try
            {
                LeaveType leaveTypeExcepted;
                DateTime  dateTime;
                User      user = new User();
                // checking whether string can convert to date of indian culture or not, if return true then further process will be conduct
                var dateConvertorResult = DateTime.TryParseExact(slackRequest[3], "dd-MM-yyyy", CultureInfo.CreateSpecificCulture("hi-IN"), DateTimeStyles.None, out dateTime);
                if (dateConvertorResult)
                {
                    // converting string to date of indian culture
                    var          startDate    = DateTime.ParseExact(slackRequest[3], "dd-MM-yyyy", CultureInfo.CreateSpecificCulture("hi-IN"));
                    LeaveRequest leaveRequest = new LeaveRequest();
                    // checking whether string can convert to leave type or not, if return true then further process will be conduct
                    var leaveTypeConvertor = Enum.TryParse(slackRequest[1], out leaveTypeExcepted);
                    if (leaveTypeConvertor)
                    {
                        // converting string to leave type of indian culture
                        var leaveType = (LeaveType)Enum.Parse(typeof(LeaveType), slackRequest[1]);
                        switch (leaveType)
                        {
                        case LeaveType.cl:
                        {
                            // checking whether string can convert to date of indian culture or not, if return true then further process will be conduct
                            var firstDateConvertorResult  = DateTime.TryParseExact(slackRequest[4], "dd-MM-yyyy", CultureInfo.CreateSpecificCulture("hi-IN"), DateTimeStyles.None, out dateTime);
                            var secondDateConvertorResult = DateTime.TryParseExact(slackRequest[5], "dd-MM-yyyy", CultureInfo.CreateSpecificCulture("hi-IN"), DateTimeStyles.None, out dateTime);
                            if (firstDateConvertorResult && secondDateConvertorResult)
                            {
                                // converting string to date time of indian culture
                                var endDate    = DateTime.ParseExact(slackRequest[4], "dd-MM-yyyy", CultureInfo.CreateSpecificCulture("hi-IN"));
                                var reJoinDate = DateTime.ParseExact(slackRequest[5], "dd-MM-yyyy", CultureInfo.CreateSpecificCulture("hi-IN"));
                                // get user details from oAuth server
                                user = await _projectUser.GetUserByUsername(leave.Username, accessToken);

                                leaveRequest.EndDate    = endDate;
                                leaveRequest.RejoinDate = reJoinDate;
                                leaveRequest.Status     = Condition.Pending;
                                leaveRequest.Type       = leaveType;
                                leaveRequest.Reason     = slackRequest[2];
                                leaveRequest.FromDate   = startDate;
                                leaveRequest.CreatedOn  = DateTime.UtcNow;
                                // if user doesn't exist in OAuth server then user can't apply leave
                                if (user.Id != null)
                                {
                                    leaveRequest.EmployeeId = user.Id;
                                    _leaveRepository.ApplyLeave(leaveRequest);
                                    replyText = _attachmentRepository.ReplyText(leave.Username, leaveRequest);
                                    // method to send slack notification and email to team leaders and management
                                    await _client.SendMessageWithAttachmentIncomingWebhook(leaveRequest, accessToken, replyText, leave.Username);
                                }
                                else
                                {
                                    // if user doesn't exist in OAuth server then user can't apply leave, will get this message
                                    replyText = _stringConstant.SorryYouCannotApplyLeave;
                                }
                            }
                            else
                            {
                                // if date is not proper than date format error message will be send to user
                                replyText = _stringConstant.DateFormatErrorMessage;
                            }
                        }
                        break;

                        case LeaveType.sl:
                        {
                            bool IsAdmin = false;
                            User newUser = new User();
                            user = await _projectUser.GetUserByUsername(leave.Username, accessToken);

                            if (slackRequest.Count > 4)
                            {
                                IsAdmin = await _projectUser.UserIsAdmin(user.Email, accessToken);

                                if (IsAdmin)
                                {
                                    // get user details from oAuth server for other user
                                    newUser = await _projectUser.GetUserByUsername(slackRequest[4], accessToken);
                                }
                                else
                                {
                                    replyText = _stringConstant.AdminErrorMessageApplySickLeave;
                                }
                            }
                            else
                            {
                                // get user details from oAuth server for own
                                newUser = await _projectUser.GetUserByUsername(leave.Username, accessToken);

                                leaveRequest.EndDate    = startDate;
                                leaveRequest.RejoinDate = startDate.AddDays(1);
                            }
                            leaveRequest.Status    = Condition.Approved;
                            leaveRequest.Type      = leaveType;
                            leaveRequest.Reason    = slackRequest[2];
                            leaveRequest.FromDate  = startDate;
                            leaveRequest.CreatedOn = DateTime.UtcNow;
                            // if user doesn't exist in OAuth server then user can't apply leave
                            if (newUser.Id != null)
                            {
                                leaveRequest.EmployeeId = newUser.Id;
                                _leaveRepository.ApplyLeave(leaveRequest);
                                replyText = _attachmentRepository.ReplyTextSick(newUser.FirstName, leaveRequest);
                                await _client.SendMessageWithoutButtonAttachmentIncomingWebhook(leaveRequest, accessToken, replyText, newUser.FirstName);

                                if (IsAdmin)
                                {
                                    _client.SendSickLeaveMessageToUserIncomingWebhook(leaveRequest, user.Email, replyText, newUser);
                                }
                            }
                            else
                            {
                                // if user doesn't exist in OAuth server then user can't apply leave, will get this message
                                replyText += _stringConstant.SorryYouCannotApplyLeave;
                            }
                        }
                        break;
                        }
                    }
                    else
                    {
                        // if leave type is not proper than not of leave type format error message will be send to user
                        replyText = _stringConstant.NotTypeOfLeave;
                    }
                }
                else
                {
                    // if date is not proper than date format error message will be send to user
                    replyText = _stringConstant.DateFormatErrorMessage;
                }
            }
            catch (SmtpException ex)
            {
                // error message will be send to email. But leave will be applied
                replyText = string.Format("{0}. {1}", _stringConstant.ErrorWhileSendingEmail, ex.Message.ToString());
            }
            catch (Exception ex)
            {
                replyText = ex.Message;
            }
            return(replyText);
        }