Files
BeWoPlaner/BeWo/Converter/CellColorConverter.cs
2021-06-20 23:11:01 +02:00

76 lines
2.5 KiB
C#

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<AdditionalServiceBookingVM>;
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<AbsenceTimeDC> 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; }
}
}