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

313 lines
9.7 KiB
C#

using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Windows;
using BeWo.Annotations;
using BeWo.Scheduler.ViewModel;
using BeWo.ServiceProxy;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using DevExpress.Xpf.Editors;
using DevExpress.Xpf.Scheduler;
using DevExpress.Xpf.Scheduler.UI;
using DevExpress.XtraScheduler;
namespace BeWo.Scheduler.View
{
public partial class ResourceAppointmentEditForm : INotifyPropertyChanged
{
private readonly IList<CompactEmployeeDC> mEmployeeList;
private readonly Dictionary<ValueListEntryDC, List<ResourceDC>> mCategoriesToResources;
private List<ValueListEntryDC> _Categories;
public List<ValueListEntryDC> Categories
{
get { return _Categories; }
set { _Categories = value; OnPropertyChanged("Categories"); }
}
private List<ResourceDC> _ResourceList;
public List<ResourceDC> ResourceList
{
get { return _ResourceList; }
set { _ResourceList = value; OnPropertyChanged("ResourceList"); }
}
public ResourceAppointmentListVM ViewModel { get; set; }
static void recurrenceControl_Loaded(object sender, RoutedEventArgs e)
{
LocalizeVisualChild(sender as DependencyObject);
}
public ResourceAppointmentFormController ResourceController { get { return Controller as ResourceAppointmentFormController; } }
public ResourceAppointmentEditForm(ResourceAppointmentListVM vm, SchedulerControl schedulerControl,
Appointment appointment, IList<CompactEmployeeDC> employees,
Dictionary<ValueListEntryDC, List<ResourceDC>> categoriesToResources, object selectedFilterObject)
: base(schedulerControl, appointment)
{
ViewModel = vm;
mEmployeeList = employees;
mCategoriesToResources = categoriesToResources;
InitializeComponent();
DataContext = this;
Categories = mCategoriesToResources.Keys.ToList();
ResourceList = mCategoriesToResources.First().Value;
MonthlyRecurrenceControl.Loaded += recurrenceControl_Loaded;
YearlyRecurrenceControl.Loaded += recurrenceControl_Loaded;
EdtRecurrenceType.Visibility = ShouldShowRecurrence ? Visibility.Visible : Visibility.Collapsed;
EdtRecurrenceType.CustomDisplayText += edtRecurrenceType_CustomDisplayText;
ResourceCategoryComboBoxEdit.ItemsSource = Categories;
if (selectedFilterObject != null)
{
// Kann Ressource(ResourceDC) oder Mitarbeiter(CompactEmployeeDC) sein (Stand: 24.10.2013)
var typ = selectedFilterObject.GetType();
if (typ == typeof (ResourceDC))
{
var selectedResource = (ResourceDC) selectedFilterObject;
ResourceController.BeWoResourceOid = selectedResource.ResourceOid;
ResourceComboBoxEdit.ItemsSource = mCategoriesToResources.First(x => x.Key.Equals(selectedResource.ResourceCategory)).Value;
ResourceComboBoxEdit.EditValue = selectedResource;
ResourceCategoryComboBoxEdit.EditValue = selectedResource.ResourceCategory;
}
else if (typ == typeof (CompactEmployeeDC))
{
ResourceController.Employee = ((CompactEmployeeDC) selectedFilterObject);
foreach (var resource in mCategoriesToResources.Values)
{
var rs = resource.FirstOrDefault(abc => abc.ResourceOid.HasValue && abc.ResourceOid.Equals(appointment.CustomFields["BeWoResourceOid"]));
if (rs == null) continue;
ResourceComboBoxEdit.ItemsSource = mCategoriesToResources.First(kvp => kvp.Key.ValueListEntryOid.Equals(rs.ResourceCategory.ValueListEntryOid.Value)).Value;
ResourceComboBoxEdit.EditValue = rs;
ResourceCategoryComboBoxEdit.EditValue = rs.ResourceCategory;
break;
}
}
}
else
{
foreach (var resource in mCategoriesToResources.Values)
{
var rs = resource.FirstOrDefault(abc => abc.ResourceOid.HasValue && abc.ResourceOid.Equals(appointment.CustomFields["BeWoResourceOid"]));
if (rs == null) continue;
ResourceComboBoxEdit.ItemsSource = mCategoriesToResources.First(kvp => kvp.Key.ValueListEntryOid.Equals(rs.ResourceCategory.ValueListEntryOid.Value)).Value;
ResourceComboBoxEdit.EditValue = rs;
ResourceCategoryComboBoxEdit.EditValue = rs.ResourceCategory;
break;
}
}
if (ResourceCategoryComboBoxEdit.SelectedIndex == -1)
{
ResourceCategoryComboBoxEdit.SelectedIndex = 0;
Controller.AllDay = false;
}
InitEmployeeCombo();
}
static void edtRecurrenceType_CustomDisplayText(object sender, CustomDisplayTextEventArgs e)
{
var conv = new Converter.Recurrence2GermanConverter();
e.DisplayText = (string)conv.Convert(e.EditValue, typeof(string), null, null);
e.Handled = true;
}
private void InitEmployeeCombo()
{
var employee = ResourceController.Employee;
if (employee == null && BeWoApp.LoggedOnEmployee.EmployeeOid.HasValue)
ServiceFacade.DoEmployeeServiceSync(s => employee = s.LoadCompactEmployee(BeWoApp.LoggedOnEmployee.EmployeeOid.Value));
if (mEmployeeList != null)
foreach (var item in mEmployeeList.Where(item => employee != null && item.EmployeeOid == employee.EmployeeOid))
employee = item;
if (employee != null)
PopupeditEmployee.Text = employee.ToString();
if (ResourceController.Employee == null)
ResourceController.Employee = employee;
}
private void button_ok_Click(object sender, RoutedEventArgs e)
{
ViewModel.NewVM.Employee = ResourceController.Employee;
var emp = ResourceController.Employee;
var res = ResourceController.BeWoResourceOid;
ViewModel.NewVM.AllDay = !Appointment.AllDay;
if (Appointment.RecurrenceInfo != null)
ViewModel.ApplyChangesToChangedOccurencyCustomFields(emp, res, Appointment.RecurrenceIndex.ToString(), Appointment.RecurrenceInfo.Id);
ApplyChanges();
}
private void button_delete_Click(object sender, RoutedEventArgs e)
{
DeleteAppointment();
}
private void button_cancel_Click(object sender, RoutedEventArgs e)
{
Cancel();
}
private void ResourceComboBoxEdit_OnEditValueChanged(object sender, EditValueChangedEventArgs e)
{
var ev = ((ComboBoxEdit)sender).EditValue as ResourceDC;
var oldOid = Controller.EditedAppointmentCopy.CustomFields["BeWoResourceOid"] != null
? (long)Controller.EditedAppointmentCopy.CustomFields["BeWoResourceOid"]
: 0L;
if (ev == null || !ev.ResourceOid.HasValue || oldOid.Equals(ev.ResourceOid.Value))
return;
ResourceController.BeWoResourceOid = ev.ResourceOid.Value;
}
private void ResourceCategoryComboBoxEdit_OnEditValueChanged(object sender, EditValueChangedEventArgs e)
{
var selectedCategory = (ValueListEntryDC)ResourceCategoryComboBoxEdit.SelectedItem;
ResourceList = mCategoriesToResources[selectedCategory];
ResourceComboBoxEdit.ItemsSource = ResourceList;
var chosenOne = ResourceList.FirstOrDefault(f => selectedCategory.ValueListEntryOid.Equals(f.ResourceCategory.ValueListEntryOid) && f.ResourceOid.Equals(Appointment.CustomFields["BeWoResourceOid"] ?? Controller.EditedAppointmentCopy.CustomFields["BeWoResourceOid"]));
if (chosenOne != null)
ResourceComboBoxEdit.SelectedItem = chosenOne;
else
{
ResourceComboBoxEdit.SelectedIndex = -1;
ResourceComboBoxEdit.SelectedIndex = 0;
}
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
private void popupedit_employee_PopUpClick(object sender, RoutedEventArgs e)
{
PopupEmployee.IsOpen = true;
}
private void EmployeeSearchView_EmployeeSelected(object sender, EventArgs<CompactEmployeeDC> e)
{
PopupEmployee.IsOpen = false;
PopupeditEmployee.Focus();
var emp = e.Data;
if (emp != null)
{
ResourceController.Employee = emp;
PopupeditEmployee.Text = emp.ToString();
}
else
{
PopupeditEmployee.Text = string.Empty;
}
}
public override AppointmentFormController CreateFormController(SchedulerControl schedulerControl, Appointment appointment)
{
return new ResourceAppointmentFormController(schedulerControl, appointment);
}
}
public class ResourceAppointmentFormController : AppointmentFormController
{
long? SourceBeWoResourceOid
{
get { return (long?)SourceAppointment.CustomFields["BeWoResourceOid"]; }
set { SourceAppointment.CustomFields["BeWoResourceOid"] = value; }
}
public long? BeWoResourceOid
{
get { return (long?)EditedAppointmentCopy.CustomFields["BeWoResourceOid"]; }
set { EditedAppointmentCopy.CustomFields["BeWoResourceOid"] = value; }
}
public CompactEmployeeDC Employee
{
get
{
return (CompactEmployeeDC)EditedAppointmentCopy.CustomFields["Employee"];
}
set
{
EditedAppointmentCopy.CustomFields["Employee"] = value;
}
}
private CompactEmployeeDC SourceEmployee
{
get
{
return (CompactEmployeeDC)SourceAppointment.CustomFields["Employee"];
}
set
{
SourceAppointment.CustomFields["Employee"] = value;
}
}
public override bool IsAppointmentChanged()
{
if (base.IsAppointmentChanged())
return true;
if (SourceEmployee!=null && Employee !=null)
return false;
return SourceEmployee == null || Employee == null || !Equals(SourceEmployee, Employee);
}
public ResourceAppointmentFormController(SchedulerControl control, Appointment apt)
: base(control, apt)
{
}
protected override void ApplyCustomFieldsValues()
{
SourceEmployee = Employee;
SourceBeWoResourceOid = BeWoResourceOid;
}
}
}