public async Task <ActionResult <TimesheetDTO> > PostTimesheet(TimesheetDTO timesheet)
        {
            var user = await _userManager.FindByNameAsync(User?.Identity?.Name);

            if (user != null)
            {
                timesheet.UserId = user.Id;
            }

            var isTimesheetForValidMonth = !_context.Timesheet.Any(t => t.Date.Year.Equals(timesheet.Date.Year) && t.Date.Month.Equals(timesheet.Date.Month) && t.UserId.Equals(user.Id));

            if (!isTimesheetForValidMonth)
            {
                return(BadRequest(new { Message = "Timesheet for selected month already exists!" }));
            }

            var timesheetObj = DtoToModel.DtoToTimesheet(timesheet);

            var validStates = States.GetStatesValues();

            if (!validStates.Contains(timesheet.State))
            {
                return(BadRequest("Provided status does not exist!"));
            }

            await _context.Timesheet.AddAsync(timesheetObj);

            await _context.SaveChangesAsync();

            var dto = ModelToDto.TimesheetToDto(timesheetObj);

            return(CreatedAtAction("GetTimesheet", new { id = timesheet.Id }, dto));
        }
示例#2
0
        public void TimesheetToDTO_Should_ReturnValidDTO()
        {
            var mockTimesheet = CreateMockTimesheet();

            var sut = ModelToDto.TimesheetToDto(mockTimesheet);

            Assert.AreEqual(sut.Id, 1);
            Assert.AreEqual(sut.Date, _sampleDate);
            Assert.AreEqual(sut.UserId, _sampleUserId);
            Assert.AreEqual(sut.Rows.Count(), 2);
            Assert.AreEqual(sut.Rows.ElementAt(0).Id, 1);
            Assert.AreEqual(sut.Rows.ElementAt(1).Id, 2);
            Assert.AreEqual(sut.Rows.ElementAt(0).RateTypeId, 1);
            Assert.AreEqual(sut.Rows.ElementAt(1).RateTypeId, 2);
            Assert.AreEqual(sut.Rows.ElementAt(0).TimesheetId, 1);
            Assert.AreEqual(sut.Rows.ElementAt(1).TimesheetId, 1);
            Assert.AreEqual(sut.Rows.ElementAt(0).Days.Count(), 2);
            Assert.AreEqual(sut.Rows.ElementAt(1).Days.Count(), 2);
            Assert.AreEqual(sut.Rows.ElementAt(0).Days.ElementAt(0).Date, _sampleDate);
            Assert.AreEqual(sut.Rows.ElementAt(0).Days.ElementAt(1).Date, _sampleDate);
            Assert.AreEqual(sut.Rows.ElementAt(1).Days.ElementAt(0).Date, _sampleDate);
            Assert.AreEqual(sut.Rows.ElementAt(1).Days.ElementAt(1).Date, _sampleDate);
            Assert.AreEqual(sut.Rows.ElementAt(0).Days.ElementAt(0).ReportedHours, 8);
            Assert.AreEqual(sut.Rows.ElementAt(0).Days.ElementAt(1).ReportedHours, 7);
            Assert.AreEqual(sut.Rows.ElementAt(1).Days.ElementAt(0).ReportedHours, 8);
            Assert.AreEqual(sut.Rows.ElementAt(1).Days.ElementAt(1).ReportedHours, 7);
        }
        public async Task <ActionResult <TimesheetDTO> > GetTimesheet(int id)
        {
            var timesheet = await _context.Timesheet.FindAsync(id);

            if (timesheet == null)
            {
                return(NotFound());
            }

            var currentUser = await _userManager.FindByNameAsync(User?.Identity?.Name);

            var isCorrectUser = _context.Timesheet.Any(t => t.Id == id && t.UserId == currentUser.Id);

            if (!isCorrectUser)
            {
                return(Forbid());
            }

            var dto = ModelToDto.TimesheetToDto(timesheet);

            return(dto);
        }