Exemplo n.º 1
0
 public static Unit FromBusinessModel(ClockWorkUnit unit, Worker worker) => new Unit
 {
     Worker       = worker,
     Start        = unit.Start,
     End          = unit.End,
     PauseSeconds = Convert.ToInt32(unit.Pause.TotalSeconds)
 };
Exemplo n.º 2
0
        public void RemoveOverlapTest()
        {
            ClockWorkUnitCollection GetNewCalendar() => new ClockWorkUnitCollection(Worker, new ClockWorkUnit(DateTime.Today.AddHours(8), DateTime.Today.AddHours(17)));

            var calendar = GetNewCalendar();
            var unit     = new ClockWorkUnit(DateTime.Today, DateTime.Today.AddHours(4));

            Assert.False(calendar.Remove(unit));

            unit = new ClockWorkUnit(DateTime.Today.AddHours(18), DateTime.Today.AddHours(20));
            Assert.False(calendar.Remove(unit));

            unit = new ClockWorkUnit(DateTime.Today, DateTime.Today.AddHours(10));
            Assert.True(calendar.Remove(unit));
            Assert.Equal(new ClockWorkUnit(DateTime.Today.AddHours(10), DateTime.Today.AddHours(17)), calendar.Single());

            calendar = GetNewCalendar();
            unit     = new ClockWorkUnit(DateTime.Today.AddHours(10), DateTime.Today.AddDays(1));
            Assert.True(calendar.Remove(unit));
            Assert.Equal(new ClockWorkUnit(DateTime.Today.AddHours(8), DateTime.Today.AddHours(10)), calendar.Single());

            calendar = GetNewCalendar();
            unit     = new ClockWorkUnit(DateTime.Today.AddHours(10), DateTime.Today.AddHours(12));
            Assert.True(calendar.Remove(unit));
            Assert.Equal(2, calendar.Count);
            Assert.Equal(new ClockWorkUnit(DateTime.Today.AddHours(8), DateTime.Today.AddHours(10)), calendar.First());
            Assert.Equal(new ClockWorkUnit(DateTime.Today.AddHours(12), DateTime.Today.AddHours(17)), calendar.Last());
        }
Exemplo n.º 3
0
        private static CalculationResult Calculate(ClockWorkUnit unit)
        {
            var start = RoundDate(unit.Start, Math.Ceiling);
            var end   = RoundDate(unit.End, Math.Floor);

            var pause = unit.Pause;
            var calculatedDuration = end - start;

            if (calculatedDuration <= TimeSpan.Zero)
            {
                pause = TimeSpan.Zero;
            }
            if (calculatedDuration - pause > TimeSpan.FromHours(6) && pause < TimeSpan.FromMinutes(30))
            {
                pause = TimeSpan.FromMinutes(30);
            }
            if (calculatedDuration - pause > TimeSpan.FromHours(9) && pause < TimeSpan.FromMinutes(45))
            {
                pause = TimeSpan.FromMinutes(45);
            }

            calculatedDuration -= pause;

            if (calculatedDuration > TimeSpan.FromHours(10))
            {
                calculatedDuration = TimeSpan.FromHours(10);
            }
            else if (calculatedDuration < TimeSpan.Zero)
            {
                calculatedDuration = TimeSpan.Zero;
            }

            return(new CalculationResult(unit.Start.Date, WorkingHours, unit.End - unit.Start - pause, calculatedDuration));
        }
Exemplo n.º 4
0
        public IActionResult RemoveUnitOfWork(int id, [FromBody] ClockWorkUnit unit)
        {
            var calender = _repository.LoadCalendar(id);

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

            calender.Remove(unit);
            _repository.Save(calender);

            return(Ok());
        }
Exemplo n.º 5
0
        public void Test()
        {
            var unit     = new ClockWorkUnit(DateTime.Today.AddHours(8), DateTime.Today.AddHours(17)).PauseFor(30);
            var worker   = new ClockWorker("Mustermann", "Max", DateTime.Today.AddYears(-21));
            var calendar = new ClockWorkUnitCollection(worker, unit);

            IEffectiveWorkingTimeCalculator calculator = new StsWorkCalculator();
            var calculationResult = calculator.Calculate(calendar);

            Assert.Equal(TimeSpan.FromHours(8.5), calculationResult.CalculatedWorkedHours);
            Assert.Equal(TimeSpan.FromHours(8.5), calculationResult.ExactWorkedHours);

            calendar.Add(new ClockWorkUnit(new DateTime(2018, 10, 1, 7, 58, 10), new DateTime(2018, 10, 1, 16, 56, 20)));
            calculationResult = calculator.Calculate(calendar);
            Assert.Equal(TimeSpan.FromMinutes(1010), calculationResult.CalculatedWorkedHours);
            Assert.NotEqual(calculationResult.CalculatedWorkedHours, calculationResult.ExactWorkedHours);
        }
Exemplo n.º 6
0
        public void BasicTest()
        {
            var today = DateTime.Today;
            var now   = DateTime.Now;
            var pause = TimeSpan.FromMinutes(30);

            var unit = new ClockWorkUnit(today, now).PauseFor(30);

            Assert.Equal(today, unit.Start);
            Assert.Equal(now, unit.End);
            Assert.Equal(pause, unit.Pause);

            var otherUnit = new ClockWorkUnit(today, now).PauseFor(TimeSpan.FromMinutes(30));

            Assert.Equal(unit, otherUnit);
            Assert.Equal(unit.GetHashCode(), otherUnit.GetHashCode());
        }
Exemplo n.º 7
0
        public Task <IActionResult> AddUnitOfWork(int id, [FromBody] ClockWorkUnit unit)
        {
            var calender = _repository.LoadCalendar(id);

            if (calender == null)
            {
                var worker = _repository.LoadWorker(id);
                if (worker == null)
                {
                    return(Task.FromResult((IActionResult)NotFound()));
                }

                calender = new ClockWorkUnitCollection(_repository.LoadWorker(id));
            }

            calender.Add(unit);
            _repository.Save(calender);

            return(Task.FromResult((IActionResult)Ok()));
        }
Exemplo n.º 8
0
        public void Test()
        {
            var startDate = new DateTime(2018, 10, 26).Date;

            var unit   = new ClockWorkUnit(startDate.AddHours(8), startDate.AddHours(17));
            var worker = new ClockWorker("Mustermann", "Max", startDate.AddYears(-21));

            var calendar = new ClockWorkUnitCollection(worker, unit);

            IEffectiveWorkingTimeCalculator calculator = new ExactWorkCalculator();
            var calculationResult = calculator.Calculate(calendar);

            Assert.Equal(TimeSpan.FromHours(9), calculationResult.CalculatedWorkedHours);
            Assert.Equal(TimeSpan.FromHours(9), calculationResult.ExactWorkedHours);

            var result = calculator.GetBalance(calendar, startDate.AddDays(1));

            Assert.Equal(calculationResult.CalculatedWorkedHours, result.CalculatedWorkedHours);

            Assert.Equal("26.10.2018, KW 43: +09:00/+08:00", calculationResult.Single().ToString());
        }
Exemplo n.º 9
0
        public void CollectionTest()
        {
            var calendar = new ClockWorkUnitCollection(Worker, new ClockWorkUnit(DateTime.Today.AddHours(8), DateTime.Today.AddHours(17)));

            calendar.Clear();

            Assert.Empty(calendar);

            calendar.Add(new ClockWorkUnit(DateTime.Today.AddHours(8), DateTime.Today.AddHours(17)));
            Assert.Contains(calendar.First(), calendar);

            var unitList = new ClockWorkUnit[10];

            calendar.CopyTo(unitList, 1);
            Assert.True(unitList.Skip(2).All(p => p == null));
            Assert.Null(unitList.First());
            Assert.Contains(unitList[1], calendar);

            calendar.Remove(unitList[1]);
            Assert.Empty(calendar);
        }
Exemplo n.º 10
0
 private static CalculationResult Calculate(ClockWorkUnit unit)
 {
     return(new CalculationResult(unit.Start.Date, WorkingDay, unit.End - unit.Start, unit.End - unit.Start));
 }