using System; using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.Linq; using System.Windows; using System.Windows.Controls; using BeWo.Annotations; using BeWo.Scheduler.Resources; using BeWo.Scheduler.ViewModel; using BeWo.ServiceProxy; using BeWo.View; using BS.Shared; using BS.Shared.Core; using BS.Shared.DataContracts; using BS.Shared.DataContracts.Compact; using BS.Shared.Extensions; using DevExpress.Xpf.Bars; using DevExpress.Xpf.Editors; using DevExpress.Xpf.Scheduler; using DevExpress.XtraScheduler; namespace BeWo.Scheduler.View { // Verschieben von Geburtstag / Ende von Hilfeplänen -> Meldung, man soll es im entsprechenden Menü machen public partial class SchedulerView : INotifyPropertyChanged { private const string FilterAbwesenheiten = "Abwesenheiten"; private const string FilterGeburtstage = "Geburtstage"; private const string FilterHilfeplaene = "Hilfepläne"; private const string FilterKein = "Kein"; private const string FilterKlienten = "Klienten"; private const string FilterMitarbeiter = "Mitarbeiter"; private const string FilterRessourcen = "Ressourcen"; private const string FilterRessourcenkategorien = "Ressourcenkategorien/Ressourcen"; private CompactEmployeeDC selectedEmployee; private CompactCustomerDC selectedCustomer; private ResourceDC selectedResource; private bool mIgnoreChangeEvents; private AppointmentKind _Terminart; public AppointmentKind Terminart { get { return _Terminart; } set { _Terminart = value; Filter1BoxEdit.SelectedItem = FilterKein; NachKlientenGruppieren.Visibility = Visibility.Hidden; BeiEigenschaftsAaenderung("Terminart"); } } public SchedulerView() { InitializeComponent(); DataContext = this; InitRights(); InitScheduler(); InitViewModel(); Scheduler.ApplyTemplate(); Scheduler.PopupMenuShowing += Scheduler_PopupMenuShowing; Scheduler.Storage.FilterResource += SchedulerStorage_FilterResource; LoadFilterLists(); NachKlientenGruppieren.Visibility = Visibility.Hidden; Scheduler.Storage.AppointmentStorage.ResourceSharing = false; } private void SchedulerStorage_FilterResource(object sender, PersistentObjectCancelEventArgs e) { var res = (Resource)e.Object; if (!Terminart.Equals(AppointmentKind.Employee) || !PopupeditEmployee.Visibility.Equals(Visibility.Visible)) { e.Cancel = false; return; } e.Cancel = !res.Id.Equals(selectedEmployee.EmployeeOid); } private SchedulerViewType currentViewType; private Dictionary> _AppointmentFilterLists; private void Filter1BoxEditLoadFilterOptions() { this.Dispatch(() => { switch (Terminart) { case AppointmentKind.Resource: Filter1BoxEdit.ItemsSource = new List { FilterKein, FilterMitarbeiter, FilterRessourcenkategorien }; break; case AppointmentKind.Employee: Filter1BoxEdit.ItemsSource = new List { FilterKein, FilterMitarbeiter }; break; case AppointmentKind.CommonCalendar: Filter1BoxEdit.ItemsSource = new List { FilterKein, FilterAbwesenheiten, FilterGeburtstage, FilterHilfeplaene, FilterKlienten }; break; case AppointmentKind.Customer: Filter1BoxEdit.ItemsSource = new List { FilterKein, FilterKlienten }; break; default: FilterLabel.Visibility = Visibility.Collapsed; Filter1BoxEdit.Visibility = Visibility.Collapsed; Filter2BoxEdit.Visibility = Visibility.Collapsed; return; } if (Filter1BoxEdit.ItemsSource == null || !((IEnumerable) Filter1BoxEdit.ItemsSource).Any()) return; Filter1BoxEdit.SelectedIndex = 0; Filter2BoxEdit.IsEnabled = false; FilterLabel.Visibility = Visibility.Visible; Filter1BoxEdit.Visibility = Visibility.Visible; ListBoxResources.Visibility = Visibility.Hidden; }); } private void Filter1BoxEdit_EditValueChanged(object sender, EventArgs e) { var cbe = (ComboBoxEdit)sender; if (cbe == null) return; Filter2BoxEdit.ItemsSource = new List(); Filter2BoxEdit.Visibility = Visibility.Hidden; ListBoxResources.Visibility = Visibility.Hidden; PopupeditCustomer.Visibility = Visibility.Hidden; PopupeditEmployee.Visibility = Visibility.Hidden; PopupeditCustomer.Text = string.Empty; PopupeditEmployee.Text = string.Empty; switch (cbe.SelectedItem.ToString()) { case FilterMitarbeiter: PopupeditEmployee.Visibility = Visibility.Visible; break; case FilterRessourcenkategorien: Filter2BoxEdit.ItemsSource = _AppointmentFilterLists[FilterRessourcenkategorien]; Filter2BoxEdit.Visibility = Visibility.Visible; ListBoxResources.Visibility = Visibility.Visible; UpdateListBoxResourcesItemsSource(); break; case FilterKlienten: PopupeditCustomer.Visibility = Visibility.Visible; break; case FilterKein: Filter2BoxEdit.ItemsSource = null; Filter2BoxEdit.EditValue = null; Filter2BoxEdit.IsEnabled = false; PopupeditCustomer.Text = string.Empty; PopupeditEmployee.Text = string.Empty; Scheduler.ActiveView.LayoutChanged(); return; case FilterGeburtstage: Scheduler.ActiveView.LayoutChanged(); return; case FilterHilfeplaene: Scheduler.ActiveView.LayoutChanged(); return; case FilterAbwesenheiten: Scheduler.ActiveView.LayoutChanged(); return; default: return; } Filter2BoxEdit.IsEnabled = true; Filter2BoxEdit.SelectedIndex = 0; } private void Filter2BoxEdit_EditValueChanged(object sender, EventArgs e) { UpdateListBoxResourcesItemsSource(); } private void Scheduler_PopupMenuShowing(object sender, SchedulerMenuEventArgs e) { if (!Terminart.Equals(AppointmentKind.Resource)) return; foreach (var item in e.Menu.ItemLinks) { var bil = item as BarItemLink; if (bil == null) continue; var biName = bil.BarItemName; if (biName.Equals("NewAllDayEvent") || biName.Equals("NewRecurringEvent")) { item.IsVisible = false; } } } private void LoadFilterLists() { _AppointmentFilterLists = new Dictionary>(); ServiceFacade.DoEmployeeServiceAsync(es => es.GetAllActiveEmployeesCompact(), a => this.Dispatch(() => _AppointmentFilterLists.Add(FilterMitarbeiter, new List(a.ToList())))); ServiceFacade.DoResourceServiceAsync(es => es.GetAllResources(), a => this.Dispatch(() => _AppointmentFilterLists.Add(FilterRessourcen, new List(a.ToList())))); ServiceFacade.DoValueListServiceAsync(es => es.GetAllValueListEntrysByType(ValueListEntryType.ResourceCategory), a => this.Dispatch(() => _AppointmentFilterLists.Add(FilterRessourcenkategorien, new List(a.ToList())))); ServiceFacade.DoCustomerServiceAsync(cs => cs.GetAllActiveCustomersCompact(false, null), a => this.Dispatch(() => _AppointmentFilterLists.Add(FilterKlienten, new List(a.ToList())))); } public SchedulerViewModel ViewModel { get; set; } public override bool IsDirty { get { return false; } } private void InitViewModel() { ViewModel = new SchedulerViewModel(); ViewModel.ViewModelChanged += ViewModel_ViewModelChanged; } private void ViewModel_ViewModelChanged(object sender, EventArgs e) { Filter1BoxEditLoadFilterOptions(); this.Dispatch(() => UpdateDataSource(e.Data)); } private void UpdateDataSource(ISchedulerViewModel vm) { UpdateCustomFieldMappings(vm); UpdateAppointmentLabels(vm.Categories); Scheduler.Storage.AppointmentStorage.DataSource = vm.Appointments; UpdateSchedulerSettings(); Scheduler.Storage.ResourceStorage.DataSource = vm.Resources; mIgnoreChangeEvents = true; foreach (Appointment item in Scheduler.Storage.AppointmentStorage.Items) { var bapp = item.GetSourceObject(Scheduler.GetCoreStorage()) as IBeWoAppointment; if (bapp == null || bapp.CustomFields == null) continue; foreach (var field in bapp.CustomFields) item.CustomFields[field.Key] = field.Value; } mIgnoreChangeEvents = false; } private void UpdateCustomFieldMappings(ISchedulerViewModel vm) { Scheduler.Storage.AppointmentStorage.CustomFieldMappings.Clear(); vm.AddCustomFieldsMapping(Scheduler.Storage); } private void UpdateAppointmentLabels(IEnumerable iList) { Scheduler.Storage.AppointmentStorage.Labels.Clear(); if (iList != null) { foreach (var item in iList) { var lbl = new AppointmentLabel { Color = item.Color, DisplayName = item.DisplayName, MenuCaption = item.MenuCaption }; Scheduler.Storage.AppointmentStorage.Labels.Add(lbl); } } } private void InitScheduler() { Scheduler.Start = DateTime.Now; Scheduler.DayView.NavigationButtonVisibility = NavigationButtonVisibility.Always; Scheduler.DayView.AppointmentDisplayOptions.ShowRecurrence = true; Scheduler.DayView.AppointmentDisplayOptions.ShowReminder = true; Scheduler.DayView.ResourcesPerPage = 3; Scheduler.WorkWeekView.ShowFullWeek = false; Scheduler.WorkWeekView.ShowWorkTimeOnly = false; Scheduler.WorkWeekView.NavigationButtonVisibility = NavigationButtonVisibility.Always; Scheduler.WorkWeekView.ResourcesPerPage = 3; Scheduler.WeekView.NavigationButtonVisibility = NavigationButtonVisibility.Always; Scheduler.WeekView.ResourcesPerPage = 3; Scheduler.MonthView.NavigationButtonVisibility = NavigationButtonVisibility.Always; Scheduler.MonthView.ResourcesPerPage = 3; Scheduler.TimelineView.NavigationButtonVisibility = NavigationButtonVisibility.Always; Scheduler.TimelineView.ResourcesPerPage = 0; } private void UpdateSchedulerSettings() { SchedulerSettings settings = ViewModel.GetActiveSettings(); Scheduler.Start = settings.StartDate; DateTime starttimeInterval = settings.StartDate.Date; starttimeInterval = starttimeInterval.AddHours(Scheduler.WorkWeekView.WorkTime.Start.Hours); switch (settings.ViewType) { case AppointmentViewType.Day: Scheduler.ActiveViewType = SchedulerViewType.Day; Scheduler.ActiveView.GotoTimeInterval(new TimeInterval(starttimeInterval, new TimeSpan(8, 0, 0))); Scheduler.DayView.DayCount = settings.DayViewCount; break; case AppointmentViewType.Week: Scheduler.ActiveViewType = SchedulerViewType.Week; Scheduler.ActiveView.GotoTimeInterval(new TimeInterval(starttimeInterval, new TimeSpan(8, 0, 0))); break; case AppointmentViewType.Month: Scheduler.ActiveViewType = SchedulerViewType.Month; break; case AppointmentViewType.WorkWeek: Scheduler.ActiveViewType = SchedulerViewType.WorkWeek; Scheduler.ActiveView.GotoTimeInterval(new TimeInterval(starttimeInterval, new TimeSpan(8, 0, 0))); break; case AppointmentViewType.Timeline: Scheduler.ActiveViewType = SchedulerViewType.Timeline; Scheduler.TimelineView.ResourcesPerPage = settings.TimelineResourceCount; Scheduler.TimelineView.IntervalCount = settings.TimelineIntervalCount; break; } UpdateOptionPanel(settings.ViewType); try { Scheduler.GroupType = settings.GroupByResource ? SchedulerGroupType.Resource : SchedulerGroupType.None; Scheduler.OptionsCustomization.AllowAppointmentDelete = settings.AllowDelete ? UsedAppointmentType.Custom : UsedAppointmentType.None; Scheduler.OptionsCustomization.AllowAppointmentEdit = settings.AllowEdit ? UsedAppointmentType.Custom : UsedAppointmentType.None; Scheduler.OptionsCustomization.AllowAppointmentDrag = settings.AllowEdit ? UsedAppointmentType.Custom : UsedAppointmentType.None; Scheduler.OptionsCustomization.AllowAppointmentDragBetweenResources = settings.AllowChangeResource ? UsedAppointmentType.Custom : UsedAppointmentType.None; Scheduler.OptionsCustomization.AllowAppointmentCreate = UsedAppointmentType.Custom; } catch (Exception) { MessageBox.Show("Ein Fehler bei der Darstellung ist aufgetreten.", "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); } } private void UpdateOptionPanel(AppointmentViewType viewType) { if (viewType == AppointmentViewType.Day) { TimelineViewOptions.Visibility = Visibility.Hidden; DayViewOptions.Visibility = Visibility.Visible; SpinEditDayViewDayCount.Value = Scheduler.DayView.DayCount; } else if (viewType == AppointmentViewType.Timeline) { TimelineViewOptions.Visibility = Visibility.Visible; DayViewOptions.Visibility = Visibility.Hidden; SpinEditTimelineViewDayCount.Value = Scheduler.TimelineView.IntervalCount; } else { TimelineViewOptions.Visibility = Visibility.Hidden; DayViewOptions.Visibility = Visibility.Hidden; } } private void InitRights() { if (!BeWoApp.LoggedOnUser.HasRight(UserRightType.Analysis_ServiceOverview_View)) { } } public void ShowView(AppointmentKind kind, int? initialViewType) { Terminart = kind; ViewModel.ActiveViewModelKind = kind; Filter1BoxEditLoadFilterOptions(); if (initialViewType.HasValue) Scheduler.ActiveViewType = (SchedulerViewType) initialViewType; } private void ButtonDayView_Click(object sender, RoutedEventArgs e) { Scheduler.ActiveViewType = SchedulerViewType.Day; currentViewType = SchedulerViewType.Day; ViewModel.SetActiveViewType(currentViewType); UpdateOptionPanel(AppointmentViewType.Day); } private void ButtonWorkWeekView_Click(object sender, RoutedEventArgs e) { Scheduler.ActiveViewType = SchedulerViewType.WorkWeek; currentViewType = SchedulerViewType.WorkWeek; ViewModel.SetActiveViewType(currentViewType); UpdateOptionPanel(AppointmentViewType.WorkWeek); } private void ButtonWeekView_Click(object sender, RoutedEventArgs e) { Scheduler.ActiveViewType = SchedulerViewType.Week; currentViewType = SchedulerViewType.Week; ViewModel.SetActiveViewType(currentViewType); UpdateOptionPanel(AppointmentViewType.Week); } private void ButtonMonthView_Click(object sender, RoutedEventArgs e) { Scheduler.ActiveViewType = SchedulerViewType.Month; currentViewType = SchedulerViewType.Month; ViewModel.SetActiveViewType(currentViewType); UpdateOptionPanel(AppointmentViewType.Month); } private void ButtonTimelineView_Click(object sender, RoutedEventArgs e) { Scheduler.ActiveViewType = SchedulerViewType.Timeline; currentViewType = SchedulerViewType.Timeline; ViewModel.SetActiveViewType(currentViewType); UpdateOptionPanel(AppointmentViewType.Timeline); } private void SchedulerStorage_AppointmentsChanged(object sender, PersistentObjectsEventArgs e) { if (!mIgnoreChangeEvents) { var appList = e.Objects.Cast().ToList(); ViewModel.ActiveAppointmentViewModel.SaveAppointments(Scheduler, appList); } } private void SchedulerStorage_AppointmentDeleting(object sender, PersistentObjectCancelEventArgs e) { var app = e.Object as Appointment; if (app != null && app.Type != AppointmentType.ChangedOccurrence) { String msg = String.Format("Möchten Sie den gewählten Termin wirklich löschen?"); if (app.Type != AppointmentType.DeletedOccurrence && MessageBox.Show(msg, "BeWoPlaner", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.No) { e.Cancel = true; } else { var appList = new List(); if (app.Type != AppointmentType.ChangedOccurrence) appList.Add(app); ViewModel.ActiveAppointmentViewModel.DeleteAppointments(Scheduler, appList); } } } private void SchedulerStorage_AppointmentsInserted(object sender, PersistentObjectsEventArgs e) { var appList = e.Objects.Cast().ToList(); ViewModel.ActiveAppointmentViewModel.InsertNewAppointments(Scheduler, appList); } private void scheduler_EditAppointmentFormShowing(object sender, EditAppointmentFormEventArgs e) { var control = sender as SchedulerControl; if (control != null) { var form = ViewModel.GetEditAppointmentForm(control, e.Appointment); if (form == null) return; e.Form = form; e.AllowResize = false; } } private void SchedulerControl_EditRecurrentAppointmentFormShowing(object sender, EditAppointmentFormEventArgs e) { } private void scheduler_PopupMenuShowing(object sender, SchedulerMenuEventArgs e) { LocalizeMenu(e.Menu); } private void LocalizeMenu(PopupMenu menu) { if (menu != null) { LocalizeItemLinks(menu.ItemLinks); } } private void LocalizeItemLinks(IEnumerable links) { if (links != null) { foreach (BarItemLinkBase itemlink in links) { var lnk = itemlink as BarButtonItemLink; if (lnk != null) LocalizeItem(lnk.Item); } } } private void LocalizeItem(BarItem item) { if (item != null) { if (item.Content != null) { String content = item.Content.ToString(); switch (content) { case "Neuer Termin": if (Terminart.Equals(AppointmentKind.Resource)) item.Content = "Neue Buchung"; break; case "Neue Terminserie": if (Terminart.Equals(AppointmentKind.Resource)) item.Content = "Neue Buchungsserie"; break; case "New Appointment": item.Content = Terminart.Equals(AppointmentKind.Resource) ? "Neue Buchung" : "Neuer Termin"; break; case "New All Day Event": item.Content = "Neues ganztägiges Ereignis"; break; case "New Recurring Appointment": item.Content = Terminart.Equals(AppointmentKind.Resource) ? "Neue Buchungsserie" : "Neue Terminserie"; break; case "New Recurring Event": item.Content = "Neue Ereignisserie"; break; case "Go to Today": item.Content = "Heute"; break; case "Go to Date...": item.Content = "Gehe zu Datum..."; break; case "Change View To": item.Content = "Ansicht ändern in"; break; case "Day View": item.Content = "Tagesansicht"; break; case "Week View": item.Content = "Wochenansicht"; break; case "Work Week View": item.Content = "Arbeitswoche"; break; case "Month View": item.Content = "Monatsansicht"; break; case "Timeline View": item.Content = "Zeitleiste"; break; case "Customize Time Ruler...": item.Content = "Maßstab anpassen"; break; case "60 Minutes": item.Content = "60 Minuten"; break; case "30 Minutes": item.Content = "30 Minuten"; break; case "15 Minutes": item.Content = "15 Minuten"; break; case "10 Minutes": item.Content = "10 Minuten"; break; case "6 Minutes": item.Content = "6 Minuten"; break; case "5 Minutes": item.Content = "5 Minuten"; break; case "Go to This Day": item.Content = "Gehe zu diesem Tag"; break; case "Time Scales": item.Content = "Zeiteinheit"; break; case "Month": item.Content = "Monat"; break; case "Week": item.Content = "Woche"; break; case "Day": item.Content = "Tag"; break; case "Hour": item.Content = "Stunde"; break; case "Quarter": item.Content = "Quartal"; break; case "Year": item.Content = "Jahr"; break; case "Time Scale Captions": item.Content = "Zeiteinheit Überschriften"; break; case "Open": item.Content = "Öffnen"; break; case "Show Time As": item.Content = "Zeigen als"; break; case "Free": item.Content = "Frei"; break; case "Tentative": item.Content = "Vorläufig"; break; case "Busy": item.Content = "Beschäftigt"; break; case "Out Of Office": item.Content = "Abwesend"; break; case "Label As": item.Content = "Kategorie"; break; case "Delete": item.Content = "Löschen"; break; case "Edit Series": item.Content = "Serie bearbeiten"; break; case "Restore Default State": item.Content = "Auf Serie zurücksetzen"; break; } } if (item is BarSubItem) { var subitem = item as BarSubItem; LocalizeItemLinks(subitem.ItemLinks); } } } private void scheduler_InitNewAppointment(object sender, AppointmentEventArgs e) { ViewModel.InitNewAppointment(e.Appointment); } private void SpinEditDayViewDayCount_EditValueChanged(object sender, EditValueChangedEventArgs e) { int count; if (e.NewValue != null && Int32.TryParse(e.NewValue.ToString(), out count)) Scheduler.DayView.DayCount = count; } private void SpinEditTimelineViewDayCount_EditValueChanged(object sender, EditValueChangedEventArgs e) { int count; if (e.NewValue != null && Int32.TryParse(e.NewValue.ToString(), out count)) { if (count > 0) Scheduler.TimelineView.IntervalCount = count; } } private void scheduler_AppointmentViewInfoCustomizing(object sender, AppointmentViewInfoCustomizingEventArgs e) { String customer = String.Empty; if (e.ViewInfo.Appointment.ResourceId != null) { if (Scheduler.Storage.ResourceStorage.DataSource != null) { var list = Scheduler.Storage.ResourceStorage.DataSource as IList; if (list != null) foreach (IBeWoAppointmentResource item in list) if (item.Id.Equals(e.ViewInfo.Appointment.ResourceId)) customer = item.Caption; } } e.ViewInfo.CustomViewInfo = String.Format(e.ViewInfo.AppointmentInterval.Start.Date == e.ViewInfo.AppointmentInterval.End.Date ? "{0:HH:mm} - {1:HH:mm} {2}\r\n{3}" : "{0:dd.MM HH:mm} - {1:dd.MM HH:mm} {2}\r\n{3}", e.ViewInfo.AppointmentInterval.Start, e.ViewInfo.AppointmentInterval.End, e.ViewInfo.Subject, customer); } public event PropertyChangedEventHandler PropertyChanged; [NotifyPropertyChangedInvocator] protected virtual void BeiEigenschaftsAaenderung(string propertyName) { var handler = PropertyChanged; if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); } private void SchedulerControl_FilterAppointments(object sender, PersistentObjectCancelEventArgs e) { if (Filter1BoxEdit.SelectedItem == null || Filter1BoxEdit.SelectedItem.Equals(FilterKein)) { ViewModel.ActiveAppointmentViewModel.SelectedFilterObject = null; e.Cancel = false; return; } switch (Terminart) { case AppointmentKind.CommonCalendar: if (Filter1BoxEdit.SelectedItem.Equals(FilterKlienten)) { e.Cancel = ViewModel.ActiveAppointmentViewModel.FilterAppointment(FilterKlienten, selectedCustomer, (Appointment) e.Object); return; } e.Cancel = ViewModel.ActiveAppointmentViewModel.FilterAppointment(Filter1BoxEdit.SelectedItem.ToString(), Filter2BoxEdit.SelectedItem, (Appointment)e.Object); break; case AppointmentKind.Customer: e.Cancel = ViewModel.ActiveAppointmentViewModel.FilterAppointment(FilterKlienten, selectedCustomer, (Appointment)e.Object); return; case AppointmentKind.Employee: e.Cancel = false; break; case AppointmentKind.Resource: if(Filter1BoxEdit.SelectedItem.Equals(FilterRessourcenkategorien)) { e.Cancel = ViewModel.ActiveAppointmentViewModel.FilterAppointment(Filter1BoxEdit.SelectedItem.ToString(), selectedResource, (Appointment)e.Object, Scheduler.LimitInterval); return; } if(Filter1BoxEdit.SelectedItem.Equals(FilterMitarbeiter)) { e.Cancel = ViewModel.ActiveAppointmentViewModel.FilterAppointment(Filter1BoxEdit.SelectedItem.ToString(), selectedEmployee, (Appointment)e.Object, Scheduler.LimitInterval); } break; default: e.Cancel = ViewModel.ActiveAppointmentViewModel.FilterAppointment(Filter1BoxEdit.SelectedItem.ToString(), Filter2BoxEdit.SelectedItem, (Appointment)e.Object); break; } } private void popupedit_employee_PopUpClick(object sender, RoutedEventArgs e) { if (Filter1BoxEdit.SelectedItem != null && Filter1BoxEdit.SelectedItem.Equals(FilterMitarbeiter)) PopupEmployee.IsOpen = true; } private void EmployeeSearchView_EmployeeSelected(object sender, EventArgs e) { PopupEmployee.IsOpen = false; PopupeditEmployee.Focus(); selectedEmployee = e.Data; PopupeditEmployee.Text = selectedEmployee != null ? selectedEmployee.ToString() : string.Empty; Scheduler.ActiveView.LayoutChanged(); } private void popupedit_customer_PopUpClick(object sender, RoutedEventArgs e) { if (Filter1BoxEdit.SelectedItem != null && Filter1BoxEdit.SelectedItem.Equals(FilterKlienten)) PopupCustomer.IsOpen = true; } private void CustomerSearchView_CustomerSelected(object sender, EventArgs e) { PopupCustomer.IsOpen = false; PopupeditCustomer.Focus(); selectedCustomer = e.Data; PopupeditCustomer.Text = selectedCustomer != null ? selectedCustomer.ToString() : string.Empty; Scheduler.ActiveView.LayoutChanged(); } private void ListBoxResources_OnSelectionChanged(object sender, SelectionChangedEventArgs e) { selectedResource = (ResourceDC) ListBoxResources.SelectedItem; if (selectedResource != null) Scheduler.ActiveView.LayoutChanged(); } private void Filter2BoxEdit_OnSelectedIndexChanged(object sender, RoutedEventArgs e) { UpdateListBoxResourcesItemsSource(); } private void UpdateListBoxResourcesItemsSource() { var x = _AppointmentFilterLists[FilterRessourcen].ToList().Cast().ToList(); ListBoxResources.ItemsSource = x.Where(b => b.ResourceCategory.Equals(Filter2BoxEdit.SelectedItem)); } private void AllowAppointmentDragEvent(object sender, AppointmentOperationEventArgs e) { if (e.Appointment.CustomFields["KalenderTyp"] == null) return; e.Allow = false; } private void AllowAppointmentCreateEvent(object sender, AppointmentOperationEventArgs e) { if (!_Terminart.Equals(AppointmentKind.CommonCalendar)) return; e.Allow = false; } private void AllowAppointmentResizeEvent(object sender, AppointmentOperationEventArgs e) { if (e.Appointment.CustomFields["KalenderTyp"] == null) return; e.Allow = false; } private void AllowAppointmentDragBetweenResourcesEvent(object sender, AppointmentOperationEventArgs e) { if (e.Appointment.CustomFields["KalenderTyp"] == null) return; e.Allow = false; } private void AllowAppointmentDeleteEvent(object sender, AppointmentOperationEventArgs e) { if (e.Appointment.CustomFields["KalenderTyp"] == null) return; e.Allow = false; } public static readonly DependencyProperty DummyValueProperty = DependencyProperty.Register("DummyValue", typeof(int), typeof(BeWoView), new UIPropertyMetadata(0)); public int DummyValue { get { return (int)GetValue(DummyValueProperty); } set { SetValue(DummyValueProperty, value); } } private void Scheduler_OnSelectionlChanged(object sender, EventArgs e) { var r = new Random(); var neuerWert = r.Next(0, 1000); if (neuerWert == DummyValue) neuerWert++; DummyValue = neuerWert; } private void Scheduler_OnVisibleIntervalChanged(object sender, EventArgs e) { var r = new Random(); var neuerWert = r.Next(0, 1000); if (neuerWert == DummyValue) neuerWert++; DummyValue = neuerWert; } } }