public OperationDetails AddWorkTime(WorkTimeDTO model) { string formatString = "dd.MM.yyyy/HH.mm"; DateTime curentDate = DateTime.Now; DateTime startDate = DateTime.ParseExact(string.Format("{0}/{1}", model.Date, model.StartTime), formatString, null); DateTime endDate = DateTime.ParseExact(string.Format("{0}/{1}", model.Date, model.EndTime), formatString, CultureInfo.InvariantCulture); Worker worker = Database.WorkerManager.Get().Find(s => s.Id == model.UserId); if (worker == null) { return(new OperationDetails(false, "Рабочий не найден", "")); } else if (startDate < curentDate || endDate < startDate) { return(new OperationDetails(false, "Ошибка даты", "")); } var isWorkToday = Database.WorkTimeManager.Get().Find(s => (s.Worker == worker) && (s.DateStart.Date.CompareTo(startDate.Date) == 0)) != null; if (isWorkToday) { return(new OperationDetails(false, "Уже работает в эту дату", "")); } else { WorkTime workTime = new WorkTime { DateStart = startDate, DateEnd = endDate, Worker = worker }; Database.WorkTimeManager.Create(workTime); return(new OperationDetails(true, "Время работы успешно добавлено", "")); } }
public IHttpActionResult SetWorkTime([FromBody] WorkTimeDTO workTime, int workerId) { try { if (ModelState.IsValid && workTime != null) { workTime.UserId = workerId; OperationDetails result = _workerService.AddWorkTime(workTime); if (result.Succedeed) { return(Ok()); } else { return(BadRequest(result.Message)); } } else { return(BadRequest(ModelState.Values.FirstOrDefault().Errors.FirstOrDefault().ErrorMessage)); } } catch (Exception e) { return(BadRequest(e.Message)); } }
public void AddWorkTime_NewTimeIfAfterStartTime_TrueResult() { // arrange var worker = new Worker { FirstName = "Ivan", SurName = "Ivanov", Id = 1, Email = "*****@*****.**", Telephone = "+375251234567" }; var workers = new List <Worker>(); workers.AddRange(new Worker[] { worker }); var workerManagerMock = new Mock <IWorkerManager>(); workerManagerMock.Setup(m => m.Get()).Returns(workers); var worker1time1 = new WorkTime { Worker = worker, DateStart = new DateTime(2008, 09, 4, 10, 0, 0, DateTimeKind.Unspecified), DateEnd = new DateTime(2008, 09, 4, 18, 0, 0, DateTimeKind.Unspecified) }; var workTime = new List <WorkTime>(); workTime.AddRange(new WorkTime[] { worker1time1 }); var workTimeManagerMock = new Mock <IWorkTimeManager>(); workTimeManagerMock.Setup(m => m.Get()).Returns(workTime); workTimeManagerMock.Setup(m => m.Create(It.IsAny <WorkTime>())).Verifiable(); var unitOfWorkMock = new Mock <IUnitOfWork>(); unitOfWorkMock.Setup(m => m.WorkerManager).Returns(workerManagerMock.Object); unitOfWorkMock.Setup(m => m.WorkTimeManager).Returns(workTimeManagerMock.Object); var curentDate = new DateTime(2008, 09, 3, 12, 0, 0, DateTimeKind.Utc); var clockMock = new Mock <IClock>(); clockMock.Setup(m => m.CurentUtcDateTime()).Returns(curentDate); var workerService = new WorkerService(unitOfWorkMock.Object, clockMock.Object); var model = new WorkTimeDTO { UserId = worker.Id, StartTime = new DateTime(2008, 09, 4, 18, 0, 0, DateTimeKind.Utc), EndTime = new DateTime(2008, 09, 4, 19, 0, 0, DateTimeKind.Utc) }; // act var actual = workerService.AddWorkTime(model); // assert actual.Should().NotBeNull(); workerManagerMock.VerifyAll(); actual.Succedeed.Should().BeTrue(); }
public void AddWorkTime_StartTimeLessEndTime_FalseReturn() { // arrange var worker = new Worker { FirstName = "Ivan", SurName = "Ivanov", Id = 1, Email = "*****@*****.**", Telephone = "+375251234567" }; var workers = new List <Worker>(); workers.AddRange(new Worker[] { worker }); var workerManagerMock = new Mock <IWorkerManager>(); workerManagerMock.Setup(m => m.Get()).Returns(workers); var unitOfWorkMock = new Mock <IUnitOfWork>(); unitOfWorkMock.Setup(m => m.WorkerManager).Returns(workerManagerMock.Object); var curentDate = new DateTime(2008, 09, 4, 12, 0, 0, DateTimeKind.Utc); var clockMock = new Mock <IClock>(); clockMock.Setup(m => m.CurentUtcDateTime()).Returns(curentDate); var workerService = new WorkerService(unitOfWorkMock.Object, clockMock.Object); var model = new WorkTimeDTO { UserId = worker.Id, StartTime = new DateTime(2008, 09, 4, 13, 0, 0, DateTimeKind.Utc), EndTime = new DateTime(2008, 09, 4, 12, 0, 0, DateTimeKind.Utc) }; // act var actual = workerService.AddWorkTime(model); // assert actual.Should().NotBeNull(); actual.Succedeed.Should().BeFalse(); }
public OperationDetails AddWorkTime(WorkTimeDTO model) { DateTime curentDate = Clock.CurentUtcDateTime(); Worker worker = Database.WorkerManager.Get().Find(s => s.Id == model.UserId); if (worker == null) { return(new OperationDetails(false, "Рабочий не найден", "")); } else if (model.StartTime < curentDate || model.EndTime < model.StartTime) { return(new OperationDetails(false, "Ошибка даты", "")); } var workerWorkTime = Database.WorkTimeManager.Get().Where(s => (s.Worker == worker)); foreach (var x in workerWorkTime) { var dateStart = DateTime.SpecifyKind(x.DateStart, DateTimeKind.Utc); var dateEnd = DateTime.SpecifyKind(x.DateEnd, DateTimeKind.Utc); if (( (model.StartTime >= dateStart) && (model.StartTime < dateEnd)) || ((model.EndTime > dateStart) && (model.EndTime <= dateEnd)) || ((dateStart >= model.StartTime) && (dateEnd <= model.EndTime))) { return(new OperationDetails(false, "Уже работает в эту дату", "")); } } WorkTime workTime = new WorkTime { DateStart = model.StartTime, DateEnd = model.EndTime, Worker = worker }; Database.WorkTimeManager.Create(workTime); return(new OperationDetails(true, "Время работы успешно добавлено", "")); }