예제 #1
0
        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, "Время работы успешно добавлено", ""));
            }
        }
예제 #2
0
 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));
     }
 }
예제 #3
0
        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();
        }
예제 #4
0
        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();
        }
예제 #5
0
        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, "Время работы успешно добавлено", ""));
        }