private void SendNotificationToSupportTeam(Task taskInHand)
 {
     emailScenario = EmailScenarioFactory.CreateEmailScenario(taskInHand);
     emailScenario.ExecuteScenario(taskInHand);
     taskInHand.BotStatus = Configurations.SUCCEEDED;
 }
        public string GrantSvnAccess(ServiceRequest SnowDataObject)
        {
            _logger.LogInformation("Starting user request processing");

            Task taskInHand = XmlDataMappingToTaskObject(SnowDataObject);
            List <UserRequest> UserRequests = XmlDataMappingToUserRequestObjects(SnowDataObject);

            taskInHand.UserRequests = UserRequests;

            if (TaskExists(taskInHand.TaskId))
            {
                _logger.LogInformation("Task id already exists in DB");

                LoadTaskDataFromDataBase(ref taskInHand);
                LoadUserRequestDataFromDataBase(ref UserRequests, taskInHand.TaskId);
                //taskInHand = loadtask(SnowDataObject.header.transaction_id);

                _logger.LogInformation("Loaded User Tasks from DB");
            }
            else
            {
                _logger.LogInformation(string.Format("New Task with id {0}", taskInHand.TaskId));
                _logger.LogInformation(string.Format("Setting bot status to {0}", Configurations.IN_PROGRESS));

                taskInHand.BotStatus = Configurations.IN_PROGRESS;
                Savetask(taskInHand);
                SaveUserRequests(ref UserRequests);
            }

            if (taskInHand.BotStatus == Configurations.IN_PROGRESS)
            {
                _logger.LogInformation("Going through each user request");

                foreach (var request in UserRequests)
                {
                    _logger.LogInformation(string.Format("Processing user request with id {0}", request.ID));

                    if (request.UserStatus == Configurations.NEW)
                    {
                        string UserExistsResponse = UserExistsOnRepoAsync(request);
                        if (UserExistsResponse == "true")
                        {
                            _logger.LogInformation(string.Format("User already exists on svn repo request ID;{0} ", request.ID));
                            _logger.LogInformation(string.Format("Updating user request to {0} on user request with id :{0}", Configurations.NEW, request.ID));

                            request.UserStatus = Configurations.ALREADY_EXISTS;
                            UpdateUserRequestStatus(request);
                        }

                        else if (UserExistsResponse == "Error")
                        {
                            break;
                        }
                        else
                        {
                            _logger.LogInformation(string.Format("Attempting to add user to svn repo user request id :{0}", request.ID));

                            try
                            {
                                taskInHand.LinuxPassword = GiveUserAccessOnRepo(request); //needs better design
                                request.UserStatus       = Configurations.ADDED_TO_SVN;
                                UpdateUserRequestStatus(request);
                            }
                            catch (Exception)
                            {
                                _logger.LogError(string.Format("Failed to add user to svn repo , user request id :{0}", request.ID));
                            }
                        }
                    }

                    if (request.UserStatus == Configurations.ADDED_TO_SVN)
                    {
                        try
                        {
                            _logger.LogInformation(string.Format("Attempting to add user to excel sheet, user request with id {0}", request.ID));

                            AddToExcelSheet(request);
                            request.UserStatus = Configurations.SUCCEEDED;
                            UpdateUserRequestStatus(request);
                        }
                        catch
                        {
                            _logger.LogError("Failed adding user to excel sheet , user request with id :{0}");
                        }
                    }
                }

                bool checkAllUsersAddedToSvn = true;
                int  UserAlreadyExistsCount  = 0;
                for (int i = 0; i < UserRequests.Count && i < Configurations.maximumAllowedRepos; i++)  // issue here confirm
                {
                    if (UserRequests[i].UserStatus == Configurations.ALREADY_EXISTS)
                    {
                        UserAlreadyExistsCount++;
                    }

                    if (UserRequests[i].UserStatus != Configurations.SUCCEEDED && UserRequests[i].UserStatus != Configurations.ALREADY_EXISTS)
                    {
                        checkAllUsersAddedToSvn = false;
                        IncrementFailedAttempts(taskInHand.TaskId);
                        //SendNotificationToSupportTeam(taskInHand); // not yet implemented
                        break;
                    }
                }

                if (UserAlreadyExistsCount == UserRequests.Count)
                {
                    taskInHand.BotStatus = Configurations.ALREADY_EXISTS;
                }

                if (checkAllUsersAddedToSvn)
                {
                    _logger.LogInformation(string.Format("User requests have been processed , setting task state to {0}", Configurations.SVN_PROCESSED));

                    //this is a bit hacky needs to be properly refactored.
                    if (taskInHand.BotStatus != Configurations.ALREADY_EXISTS)
                    {
                        taskInHand.BotStatus = Configurations.SVN_PROCESSED;
                    }
                }

                if (taskInHand.BotStatus == Configurations.SVN_PROCESSED || taskInHand.BotStatus == Configurations.ALREADY_EXISTS)
                {
                    try
                    {
                        _logger.LogInformation(string.Format("Attempting to send success email to relevant users , task id :{0}", taskInHand.TaskId));
                        emailScenario = EmailScenarioFactory.CreateEmailScenario(taskInHand);
                        emailScenario.ExecuteScenario(taskInHand);
                        taskInHand.BotStatus = Configurations.SUCCEEDED;
                    }
                    catch (Exception)
                    {
                        _logger.LogError(string.Format("Attempting to send success email to relevant users , task id :{0}", taskInHand.TaskId));

                        IncrementFailedAttempts(taskInHand.TaskId);
                    }
                }
            }

            if (taskInHand.BotStatus == Configurations.SUCCEEDED)
            {
                UpdateTaskStatus(taskInHand);
                return("200");
            }

            else
            {
                SendNotificationToSupportTeam(taskInHand);
                UpdateTaskStatus(taskInHand);
                return("500");
            }
        }