Files
BeWoPlaner/BeWo/Scheduler/View/SchedulerView.xaml.cs
2016-06-27 01:45:38 +02:00

888 lines
34 KiB
C#

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<string, List<IDataContract>> _AppointmentFilterLists;
private void Filter1BoxEditLoadFilterOptions()
{
this.Dispatch(() =>
{
switch (Terminart)
{
case AppointmentKind.Resource:
Filter1BoxEdit.ItemsSource = new List<string> { FilterKein, FilterMitarbeiter, FilterRessourcenkategorien };
break;
case AppointmentKind.Employee:
Filter1BoxEdit.ItemsSource = new List<string> { FilterKein, FilterMitarbeiter };
break;
case AppointmentKind.CommonCalendar:
Filter1BoxEdit.ItemsSource = new List<string> { FilterKein, FilterAbwesenheiten, FilterGeburtstage, FilterHilfeplaene, FilterKlienten };
break;
case AppointmentKind.Customer:
Filter1BoxEdit.ItemsSource = new List<string> { FilterKein, FilterKlienten };
break;
default:
FilterLabel.Visibility = Visibility.Collapsed;
Filter1BoxEdit.Visibility = Visibility.Collapsed;
Filter2BoxEdit.Visibility = Visibility.Collapsed;
return;
}
if (Filter1BoxEdit.ItemsSource == null || !((IEnumerable<object>) 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<object>();
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<string, List<IDataContract>>();
ServiceFacade.DoEmployeeServiceAsync(es => es.GetAllActiveEmployeesCompact(), a => this.Dispatch(() => _AppointmentFilterLists.Add(FilterMitarbeiter, new List<IDataContract>(a.ToList()))));
ServiceFacade.DoResourceServiceAsync(es => es.GetAllResources(), a => this.Dispatch(() => _AppointmentFilterLists.Add(FilterRessourcen, new List<IDataContract>(a.ToList()))));
ServiceFacade.DoValueListServiceAsync(es => es.GetAllValueListEntrysByType(ValueListEntryType.ResourceCategory), a => this.Dispatch(() => _AppointmentFilterLists.Add(FilterRessourcenkategorien, new List<IDataContract>(a.ToList()))));
ServiceFacade.DoCustomerServiceAsync(cs => cs.GetAllActiveCustomersCompact(false, null), a => this.Dispatch(() => _AppointmentFilterLists.Add(FilterKlienten, new List<IDataContract>(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<ISchedulerViewModel> 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<BeWoAppointmentCategory> 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<Appointment>().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<Appointment>();
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<Appointment>().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<BarItemLinkBase> 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<IBeWoAppointmentResource>;
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<CompactEmployeeDC> 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<CompactCustomerDC> 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<ResourceDC>().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;
}
}
}