public static T UpdateObject(dynamic delta, T currentObject) { var propertyInfoes = typeof(T).GetProperties(); foreach (var propertyInfo in propertyInfoes) { if (StringHandler.ToLowerCamelCase(propertyInfo.Name) != "id" && HasField(delta, StringHandler.ToLowerCamelCase(propertyInfo.Name))) { if (propertyInfo.PropertyType.Name.Contains("Nullable")) { int?value = delta[StringHandler.ToLowerCamelCase(propertyInfo.Name)]; propertyInfo.SetValue(currentObject, value); } else if (propertyInfo.PropertyType.Name.Contains("DateTime")) { DateTime value = delta[StringHandler.ToLowerCamelCase(propertyInfo.Name)]; propertyInfo.SetValue(currentObject, value); } else if (propertyInfo.PropertyType.Name.Contains("Double")) { double value = delta[StringHandler.ToLowerCamelCase(propertyInfo.Name)]; propertyInfo.SetValue(currentObject, value); } else if (propertyInfo.PropertyType.Name.Contains("LockTimePeriod")) { LockTimePeriod value = delta[StringHandler.ToLowerCamelCase(propertyInfo.Name)]; propertyInfo.SetValue(currentObject, value); } else { string value = delta[StringHandler.ToLowerCamelCase(propertyInfo.Name)]; propertyInfo.SetValue(currentObject, Convert.ChangeType(value, propertyInfo.PropertyType)); } } } return(currentObject); }
public static bool IsTimeEntryLocked(DateTime timeEntryDateEditing, int daysAfterLock, LockTimePeriod lockPeriod) { var today = DateTime.Today; switch (lockPeriod) { case LockTimePeriod.Week: { SetRangeOfThisWeekByDate(out var weekByTodayFirstDate, out var weekByTodayLastDate, today); var lockDateLastDate = weekByTodayFirstDate.AddDays(daysAfterLock); var isTodayInLockPeriodAtThisWeek = today <= lockDateLastDate; var todayDateAtPreviousWeek = today.AddDays(-14); var todayDateAtThisWeek = today.AddDays(-7); var editingWeekDay = isTodayInLockPeriodAtThisWeek ? todayDateAtPreviousWeek : todayDateAtThisWeek; SetRangeOfThisWeekByDate(out var editingWeekFirstDate, out var editingWeekLastDate, editingWeekDay); return(timeEntryDateEditing <= editingWeekLastDate); } case LockTimePeriod.Month: { SetRangeOfThisMonthByDate(out var monthByTodayFirstDate, out var monthByTodayLastDate, today); var lockDateLastDate = monthByTodayFirstDate.AddDays(daysAfterLock); var isInLockPeriod = today <= lockDateLastDate; var todayDateAtPreviousMonth = today.AddMonths(-2); var todayDateAtThisMonth = today.AddMonths(-1); var editingMonthDay = isInLockPeriod ? todayDateAtPreviousMonth : todayDateAtThisMonth; SetRangeOfThisMonthByDate(out var editingMonthFirstDate, out var editingMonthLastDate, editingMonthDay); return(timeEntryDateEditing <= editingMonthLastDate); } default: { return(false); } } }