using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Linq; using MercatorApi; using MercatorExtensions; using MercatorUi; using MercatorDatabase; // <CompileWithRoslyn /> namespace WorkTime { public class Customizer : MercatorCommonCustomizers.WorkTimeCustomizer { public override OnUpdateRet OnUpdate(OnUpdateParam p) { // 1. Verbied het verplaatsen van een registratie naar een andere dag if (IsDayChanged(p.Moment1Current, p.Moment1NewValue) || IsDayChanged(p.Moment2Current, p.Moment2NewValue)) { return new OnUpdateRet { DialogType = DialogTypeEnum.Stop, Message = "Een registratie kan niet naar een andere dag verplaatst worden.", }; } // 2. Vraag bevestiging als een uur met meer dan 2 uur gewijzigd wordt if (IsChangedByMoreThan(p.Moment1Current, p.Moment1NewValue, TimeSpan.FromHours(2)) || IsChangedByMoreThan(p.Moment2Current, p.Moment2NewValue, TimeSpan.FromHours(2))) { return new OnUpdateRet { DialogType = DialogTypeEnum.AnswerYesNo, Message = "Minstens één registratie-uur werd met meer dan 2 uur gewijzigd. Wilt u deze wijziging bevestigen?", }; } return new OnUpdateRet { DialogType = DialogTypeEnum._none, }; } private static bool IsDayChanged(DateTime? current, DateTime? newValue) { return current.HasValue && newValue.HasValue && current.Value.Date != newValue.Value.Date; } private static bool IsChangedByMoreThan(DateTime? current, DateTime? newValue, TimeSpan tolerance) { return current.HasValue && newValue.HasValue && Math.Abs((newValue.Value - current.Value).TotalMinutes) > tolerance.TotalMinutes; } } }