using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Windows.Data; using System.Windows.Markup; using System.Windows.Media; using BeWo.View.Detail; using BeWo.ViewModel; using BS.Shared.DataContracts; using DevExpress.Xpf.Grid; namespace BeWo.Converter { public class CellColorConverter : MarkupExtension, IMultiValueConverter { public object Convert(object[] value, Type targetType, object parameter, CultureInfo culture) { Brush b = new SolidColorBrush(Color.FromArgb(255, 233, 233, 233)); if (value[1].ToString().Equals(string.Empty)) return b; var cellData = value[0] as EditGridCellData; var viewTag = cellData.View.Tag as List; var date = int.Parse(value[1].ToString().Split('.')[0], NumberStyles.Integer); if (viewTag != null && viewTag.Count > 0 && value.Length > 2 && value[2] is Teilnehmer) { var booking = viewTag[0]; if (date <= DateTime.DaysInMonth(booking.Date.Year, booking.Date.Month)) { var dt = new DateTime(booking.Date.Year, booking.Date.Month, date); if (dt.DayOfWeek == DayOfWeek.Saturday || dt.DayOfWeek == DayOfWeek.Sunday) { return Brushes.CornflowerBlue; } var t = (Teilnehmer) value[2]; if (IsAbsence(dt, t.Customer.AbsenceTimes)) { return Brushes.LightGray; } } } return viewTag.Any(v => v.Date.Day.Equals(date)) ? Brushes.White : b; } private bool IsAbsence(DateTime dt, List absenceTimes) { if (absenceTimes == null) { return false; } foreach (var at in absenceTimes) { if ((!at.Start.HasValue || at.Start.Value <= dt) && (!at.End.HasValue || at.End.Value >= dt)) { return true; } } return false; } public object[] ConvertBack(object value, Type[] targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } public override object ProvideValue(IServiceProvider serviceProvider) { return this; } } }