Beispiel #1
0
        public async Task GetProjectsByUserGuid()
        {
            //Arrange
            var input = new GetProjectsByUserGuidDatabaseInput("67d537cb-123d-424b-a6d1-2cc5b2920430");

            //Act
            var projectNames = await _trackTimeRepo.GetProjectsByUserGuid(input);

            //Assert
            Assert.NotNull(projectNames);
        }
        /// <summary>
        /// Get the projects a user has been assigned
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task <List <GetProjectsByUserGuidDatabaseOutput> > GetProjectsByUserGuid(GetProjectsByUserGuidDatabaseInput input)
        {
            var p = new DynamicParameters();

            p.Add("@p_UserGuid", input.UserGuid);

            IEnumerable <GetProjectsByUserGuidDatabaseOutput> projectNames;

            using (IDbConnection connection = new SqlConnection(_connectionString))
            {
                //if the IEnumerable has a count of 0 throw an error since the user has not been assigned a project
                projectNames = await connection.QueryAsync <GetProjectsByUserGuidDatabaseOutput>("sp_GetProjectsByUserGuid", p, commandType : CommandType.StoredProcedure);
            }

            return(projectNames.ToList());
        }
Beispiel #3
0
 /// <summary>
 /// Gets the projects the user is assigne
 /// </summary>
 /// <param name="input"></param>
 /// <returns></returns>
 public async Task <List <GetProjectsByUserGuidDatabaseOutput> > GetProjectsByUserGuid(GetProjectsByUserGuidDatabaseInput input)
 {
     return(await _ITrackTimeRepo.GetProjectsByUserGuid(input));
 }
Beispiel #4
0
        /// <summary>
        /// Create a new TrackTime record
        /// </summary>
        /// <returns></returns>
        public async Task <IActionResult> CreateNewTrackTimeRecord()
        {
            if (TempData.Peek("userName") == null)
            {
                return(UserNotAllowedAccess());
            }

            string startOfWeek;
            string lastOfWeek;

            //see if there was at least one track time record created
            bool anyUpdates = false;

            try
            {
                var getProjectNamesInput = new GetProjectsByUserGuidDatabaseInput(TempData.Peek("userGuid").ToString());

                //get the projects the user has been assigned
                var projectNamesList = await _ITrackTimeDomain.GetProjectsByUserGuid(getProjectNamesInput);

                //if the user has not been assigned a project yet throw this error
                if (projectNamesList.Count == 0)
                {
                    throw new TrackTimeRecordAlreadyExistsException("You do not have any projects assigned. Please contact your Project Manager or Manager.");
                }

                //Get today's date
                var currentDay = DateTime.Now;

                //using today's date get the start and end dates of the week
                startOfWeek = _ITrackTimeDomain.FirstDayOfWeek(currentDay).ToShortDateString();
                lastOfWeek  = _ITrackTimeDomain.LastDayOfWeek(currentDay).ToShortDateString();

                //foreach assigned project, create a new TrackTime record
                bool isRecordCreated = false;
                foreach (var project in projectNamesList)
                {
                    var createTrackTimeInput = new CreateNewTrackTimeRecordDatabaseInput(TempData.Peek("userGuid").ToString(),
                                                                                         project.ProjectName, startOfWeek,
                                                                                         lastOfWeek
                                                                                         );

                    //check to see if there already is a track time record for a proejct for the week
                    isRecordCreated = await _ITrackTimeDomain.IsTrackTimeRecordCreatedForProject(createTrackTimeInput);

                    //if no record exists then create one
                    if (!isRecordCreated)
                    {
                        await _ITrackTimeDomain.CreateNewTrackTimeRecord(createTrackTimeInput);

                        anyUpdates = true;
                    }
                }

                if (!anyUpdates)
                {
                    throw new TrackTimeRecordAlreadyExistsException($"A TrackTime entry has already been created for the week: {startOfWeek} - {lastOfWeek}");
                }
            }
            catch (TrackTimeRecordAlreadyExistsException ex)
            {
                //The user clicked 'Create New Record' for a week in which a record is already created
                TempData.Add("CreateTrackTimeError", ex.Message);

                return(RedirectTo("TrackTime", "DisplayTrackTimeDateRange"));
            }
            catch (Exception ex)
            {
                TempData.Add("CreateTrackTimeError", ex.Message);

                return(RedirectTo("TrackTime", "DisplayTrackTimeDateRange"));
            }

            return(RedirectToAction("DisplayTrackTimeDetails", "TrackTime", new { startDate = startOfWeek, endDate = lastOfWeek }));
        }