public static Unit FromBusinessModel(ClockWorkUnit unit, Worker worker) => new Unit { Worker = worker, Start = unit.Start, End = unit.End, PauseSeconds = Convert.ToInt32(unit.Pause.TotalSeconds) };
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()); }
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)); }
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()); }
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); }
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()); }
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())); }
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()); }
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); }
private static CalculationResult Calculate(ClockWorkUnit unit) { return(new CalculationResult(unit.Start.Date, WorkingDay, unit.End - unit.Start, unit.End - unit.Start)); }