using System; using System.Collections.Generic; using System.ComponentModel; using System.Globalization; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; using System.Windows.Data; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Threading; using BeWo.Annotations; using BeWo.Controls; using BeWo.Core; using BeWo.Core.Service; using BeWo.MultiLanguage; using BeWo.Scheduler.ViewModel; using BeWo.ServiceProxy; using BeWo.Validation; using BeWo.ViewModel; using BS.Shared; using BS.Shared.Core; using BS.Shared.DataContracts; using BS.Shared.DataContracts.ClientPartials; using BS.Shared.DataContracts.Compact; using BS.Shared.Extensions; using BS.Shared.Translation; using DevExpress.Mvvm.POCO; using DevExpress.Utils; using DevExpress.Xpf.Editors.Settings; using DevExpress.Xpf.Grid; using DevExpress.Xpf.Editors; using System.Windows.Navigation; using System.Windows.Documents; namespace BeWo.View.Detail { public partial class SupportConceptView : INotifyPropertyChanged { #region Constants and Fields private TreeViewItem _SelectedGoalTreeNode; private PersonView _PersonModalPopUp; private List _ServiceRecords; private SupportConceptVM _ViewModel; private bool employeeEditFlag; private bool isChangingCostbearer; private SupportConceptCostBearerRelVM supportConceptCostBearerRel2Change; private readonly SchedulerAppointmentDC taskToEdit; #region Rechtebinding public static bool IsAllowedToChangeCostbeaerer { get { return BeWoApp.LoggedOnUser.HasRight(UserRightType.CostbearerAllowChange); } } public static bool IsAllowedToEditCostbearers { get { return BeWoApp.LoggedOnUser.HasRight(UserRightType.SupportConceptView_Edit); } } public static bool IsAllowedToEditGoals { get { return BeWoApp.LoggedOnUser.HasRight(UserRightType.SupportConcept_AllowEditGoals); } } #endregion #endregion #region Constructors and Destructors public SupportConceptView(SupportConceptVM pViewModel) { InitializeComponent(); ViewModel = pViewModel; //tabitem_goalsNeu.Visibility = Visibility.Collapsed; if (!BeWoApp.LoggedOnUser.HasRight(UserRightType.SupportConceptView_AllowArchiving)) { lblArchiviert.Visibility = Visibility.Hidden; chkArchiviert.Visibility = Visibility.Hidden; } if (!BeWoApp.LoggedOnUser.HasRight(UserRightType.DocumentsAllowViewAll) && !BeWoApp.LoggedOnUser.HasRight(UserRightType.DokumenteHilfeplaene)) { tabitem_documents.Visibility = Visibility.Collapsed; } if (!BeWoApp.LoggedOnUser.HasRight(UserRightType.SupportConceptView_Edit)) { grid_details.IsEnabled = false; button_addCostBearer.IsEnabled = false; //tabitem_documents.IsEnabled = false; grid_serviceaccountings.IsEnabled = false; tabitem_grid_tasks.IsEnabled = false; if (BeWoApp.LoggedOnUser.HasRight(UserRightType.SupportConcept_AllowEditTasks)) { tabitem_grid_tasks.IsEnabled = true; tabitem_tasks.IsSelected = true; } if (BeWoApp.LoggedOnUser.HasRight(UserRightType.SupportConcept_AllowEditGoals)) { tabitem_goals.IsSelected = true; } } if (pViewModel.VarFields == null || pViewModel.VarFields.VMList.Count == 0) { tabitem_varFields.Visibility = Visibility.Collapsed; } // HACK: Force the devexpress grid to end editing when the mouse is over savebutton // by setting the focus to another element. this.MouseMove += (s, e) => { if (!this.gridViewTasks.IsVisible) { return; } Point p = e.GetPosition(this.btnSave); if (p.X >= 0 && p.X < this.btnSave.ActualWidth && p.Y >= 0 && p.Y < this.btnSave.ActualHeight) { bool b = this.gridViewTasks.Focus(); } }; this.Loaded += OnLoaded; } private void OnLoaded(object sender, RoutedEventArgs routedEventArgs) { if (taskToEdit != null) { tabitem_tasks.IsSelected = true; var item = ViewModel.Tasks.VMList.Single(vm => vm.DataContract.SchedulerAppointmentOid.Equals(taskToEdit.SchedulerAppointmentOid)); var handle = grid_tasks.GetRowHandleByListIndex(ViewModel.Tasks.VMList.IndexOf(item)); gridViewTasks.FocusedRowHandle = handle; grid_tasks.CurrentColumn = TaskGridColumnCompletedDate; Dispatcher.BeginInvoke(new Action(() => { gridViewTasks.ShowEditor(); }), DispatcherPriority.Background); } } public SupportConceptView(SupportConceptVM pViewModel, SchedulerAppointmentDC pTaskToEdit) : this(pViewModel) { taskToEdit = pTaskToEdit; } #endregion #region Properties private SupportConceptApprovalPeriodVM _SelectedApprovalPeriodVM; public SupportConceptApprovalPeriodVM SelectedApprovalPeriodVM { get => _SelectedApprovalPeriodVM; set { _SelectedApprovalPeriodVM = value; OnPropertyChanged(nameof(SelectedApprovalPeriodVM)); } } public bool ShowHilfeplanBezeichnung => BeWoApp.AppSettings.ShowHilfeplanBezeichnung; public override bool IsDirty => ViewModel != null && ViewModel.IsDirty; public override string Title => Translator.Translate("Hilfepläne"); internal override DependencyObject ValidationOnSaveRootElement => grid_details; internal SupportConceptVM ViewModel { get { return _ViewModel; } set { var i = 0; if (tabcontrol_costbearers != null) { i = tabcontrol_costbearers.SelectedIndex; } _ViewModel = value; DataContext = value; if (ViewModel.Originator != null) { popupedit_employee.Text = ViewModel.Originator.ToString(); } if (ViewModel.Customer != null) { popupedit_customer.Text = ViewModel.Customer.ToString(); } //treeview_Goals.ItemsSource = value.CombinedGoalTree; if (tabcontrol_costbearers != null) { tabcontrol_costbearers.SelectedIndex = i; } treeview_serviceAccountings.ItemsSource = value.GlobalServiceTree; //this.treeview_individualServiceAccountings.ItemsSource = value.IndividualServiceTree; } } #endregion #region Public Methods public override void ModalPopUpCloseInvoked() { this.MainControl.CloseCurrentPopUp(); } public override void ModalPopUpSaveInvoked() { // TODO nicht schön, umbauen wenn an weiteren Stellen popup hierachien nötig werden if (this._PersonModalPopUp._OrganisationModalPopUp != null) { this._PersonModalPopUp._OrganisationModalPopUp.SaveData(); } else { this._PersonModalPopUp.SaveData(); } } #endregion #region Methods protected override UserRightType[] GetSaveDemands() { return ViewModel.IsNew ? new[] { UserRightType.CreateAll, UserRightType.SupportConceptView_Create } : new[] { UserRightType.EditAll, UserRightType.SupportConceptView_Edit, UserRightType.SupportConcept_AllowEditGoals, UserRightType.SupportConcept_AllowEditTasks }; } protected override void Save() { if (ViewModel.CostBearerRelations.VMList.Exists(vm => vm.CostBearer == null)) { MessageBox.Show(Translator.Translate("Bitte wählen Sie einen Kostenträger aus"), "Fehlende Eingabe", MessageBoxButton.OK); return; } foreach (var cbr in ViewModel.CostBearerRelations.VMList) { foreach (var ap in cbr.ApprovalPeriodList.VMList) { var isAbsolute = false; decimal summe = 0; foreach (var ape in ap.SupportConceptApprovalEmployeeRelations.VMList) { summe += ape.Betreuungsschluessel; isAbsolute = ape.IsAbsolut; } if (isAbsolute) { if (ap.ApprovedBEPerInterval.HasValue && summe > (ap.ApprovedBEPerInterval.Value * 60)) { MessageBox.Show($"Die Summe der Anteile liegt bei über {(ap.ApprovedBEPerInterval.Value * 60):0} Minuten. Speichern nicht möglich.", "Fehler", MessageBoxButton.OK, MessageBoxImage.Warning); return; } } else if (summe > 100) { MessageBox.Show("Die Summe der Anteile liegt bei über 100%. Speichern nicht möglich.", "Fehler", MessageBoxButton.OK, MessageBoxImage.Warning); return; } } } //var mehrAlsHundertProzentBetreuungsschluessel = ViewModel.CostBearerRelations.VMList.Any(a => a.ApprovalPeriodList.VMList.Any(a2 => a2.SupportConceptApprovalEmployeeRelations.VMList.Sum(s => s.Betreuungsschluessel) > 100)); //if (mehrAlsHundertProzentBetreuungsschluessel) //{ // MessageBox.Show("Die Summe der Anteile liegt bei über 100%. Hinzufügen nicht möglich.", "Fehler", MessageBoxButton.OK, MessageBoxImage.Warning); // return; //} var lDataContract = ViewModel.CommitToDataContract(); var recordOutOfConcept = true; ServiceFacade.DoCustomerServiceSync(s => recordOutOfConcept = s.ServiceRecordOutOfSupportConcept(lDataContract)); if (recordOutOfConcept) { if (!BeWoApp.LoggedOnUser.HasRight(UserRightType.BookServiceRecordOutOfSupportConcept)) { MessageBox.Show(Translator.Translate("Es existiert mindestens eine Buchung außerhalb des Hilfeplanzeitraums."), "Speichern nicht möglich", MessageBoxButton.OK, MessageBoxImage.Warning); } else { var mbResult = MessageBox.Show(Translator.Translate("Es existiert mindestens eine Buchung außerhalb des Hilfeplanzeitraums.\nMöchten Sie trotzdem speichern?"), "Speichern", MessageBoxButton.YesNo, MessageBoxImage.Warning); if (mbResult.Equals(MessageBoxResult.No)) { return; } } } try { //#region Neue Individuelle Ziele speichern var neueZM = ViewModel.CombinedGoals.VMList.Where(w => w.IsNew); ViewModel.TreeViewItemsList = new List(); ViewModel.GetAllTreeViewItems(); var obersteZiele = neueZM.Where(w => w.IsNew && (w.ParentEntry != null && w.ParentEntry.ValueListEntryOid != null) || w.ParentEntry == null).ToList(); var alleNeuenZiele = new List(); foreach (var ziel in obersteZiele) { var treeItem = ViewModel.TreeViewItemsList.FirstOrDefault(f => f.GoalEntryVM != null && f.GoalEntryVM.Equals(ziel)); if (treeItem != null) { alleNeuenZiele.AddRange(GoalService.SaveIndividualGoalsAndMassnahmenRecursively(treeItem)); } } lDataContract = ViewModel.CommitToDataContract(); lDataContract.Goals.RemoveRange(lDataContract.Goals.Where(g => !g.ValueListEntryOid.HasValue)); //ViewModel.CombinedGoals.VMList.RemoveRange(ViewModel.CombinedGoals.VMList.Where(w => w.IsNew)); foreach (var zielDC in alleNeuenZiele) { lDataContract.Goals.Add(zielDC); //ViewModel.CombinedGoals.VMList.Add(new ValueListEntryVM(zielDC)); } //#endregion if (ViewModel.IsNew) { ServiceFacade.DoCustomerServiceAsync(s => s.InsertNewSupportConcept(lDataContract), ReloadViewModel); } else { ServiceFacade.DoCustomerServiceAsync(s => s.UpdateSupportConcept(lDataContract), ReloadViewModel); } Cache.GetInstance().ClearSupportConceptTree(); BeWoApp.MainControl.ResetView(UIContext.SupportConcept); } catch (Exception e) { MessageBox.Show(e.Message); } } private void Button_Loaded(object sender, RoutedEventArgs e) { var t = new DispatcherTimer(DispatcherPriority.Normal, Dispatcher) { Interval = TimeSpan.FromSeconds(.5) }; t.Tick += delegate { ((Button)sender).Click += add_edit_employee_Click; t.Stop(); }; t.Start(); } private void CostBearerSearchView_OrganisationSelected(object sender, EventArgs e) { popup_costbearer.IsOpen = false; if (ViewModel.CostBearerRelations.VMList.Exists(vm => vm.CostBearer != null && vm.CostBearer.CostBearerOid.Equals(e.Data.CostBearerOid))) { MessageBox.Show(Translator.Translate("Dieser Kostenträger wurde bereits hinzugefügt."), "Zufügen nicht möglich", MessageBoxButton.OK, MessageBoxImage.Information); return; } if (!isChangingCostbearer) { var newVm = ViewModel.CostBearerRelations.NewVM; newVm.CostBearer = e.Data; if (ViewModel.Customer != null && string.IsNullOrEmpty(newVm.CustomerReferenceNumber) && ViewModel.Customer.CostBearerReferenceNumbers.ContainsKey(e.Data.CostBearerOid.Value)) { newVm.CustomerReferenceNumber = ViewModel.Customer.CostBearerReferenceNumbers[e.Data.CostBearerOid.Value]; } ViewModel.CostBearerRelations.AddNewVMToList(); tabcontrol_costbearers.SelectedIndex = tabcontrol_costbearers.Items.Count - 1; AddNewApprovalPeriod(newVm); } else { supportConceptCostBearerRel2Change.CostBearer = e.Data; if (ViewModel.Customer != null && ViewModel.Customer.CostBearerReferenceNumbers.ContainsKey(e.Data.CostBearerOid.Value)) { supportConceptCostBearerRel2Change.CustomerReferenceNumber = ViewModel.Customer.CostBearerReferenceNumbers[e.Data.CostBearerOid.Value]; } else { supportConceptCostBearerRel2Change.CustomerReferenceNumber = null; } supportConceptCostBearerRel2Change.CostBearerContactPerson = null; } isChangingCostbearer = false; supportConceptCostBearerRel2Change = null; } private void CustomerSearchView_CustomerSelected(object sender, EventArgs e) { popup_customer.IsOpen = false; popupedit_customer.Focus(); var newCustomer = e.Data; if (ViewModel.Customer != null && !ViewModel.Customer.Equals(newCustomer)) { if (!ViewModel.IsNew) { if (HasServiceRecords(ViewModel)) { MessageBox.Show(Translator.Translate( "Für diesen Klienten wurden bereits Leistungen hinterlegt. Sie müssen diese Leistungen erst löschen bevor Sie den Klient wechseln können."), "Fehler", MessageBoxButton.OK, MessageBoxImage.Exclamation); return; } } } ViewModel.Customer = e.Data; } private void EmployeeSearchView_EmployeeSelected(object sender, EventArgs e) { popup_employee.IsOpen = false; if (!tabitem_tasks.IsSelected) { ViewModel.Originator = e.Data; popupedit_employee.Focus(); popupedit_employee.Text = e.Data.ToString(); } else { if (employeeEditFlag) { var data = grid_tasks.View.FocusedRowData; if (data?.RowHandle != null) { var vm = grid_tasks.GetRow(data.RowHandle.Value) as SchedulerAppointmentVM; if (!vm.EmployeeList.Exists(i => i.Employee.EmployeeOid.Equals(e.Data.EmployeeOid))) { vm.EmployeeList.Add(new Employee2SchedulerAppointmentDC { Employee = e.Data }); } } } else if (!ViewModel.Tasks.NewVM.EmployeeList.Exists(i => i.Employee.EmployeeOid.Equals(e.Data.EmployeeOid))) { ViewModel.Tasks.NewVM.EmployeeList.Add(new Employee2SchedulerAppointmentDC { Employee = e.Data }); } employeeEditFlag = false; } } private List GetServiceRecords() { if (_ServiceRecords == null && ViewModel.Customer != null) { _ServiceRecords = ViewModel.IsArchived ? ServiceFacade.DoOperationsServiceSync(s => s.GetCustomerServiceRecords(ViewModel.Customer.CustomerOid, true)) : ServiceFacade.DoOperationsServiceSync(s => s.GetCustomerServiceRecords(ViewModel.Customer.CustomerOid, false)); } return _ServiceRecords; } private bool HasServiceRecords(SupportConceptCostBearerRelVM relVM) { var records = GetServiceRecords(); if (records != null) { return records.Where(srDC => srDC.SupportConcept != null && srDC.CostBearer != null && relVM.CostBearer != null) .Any(srDC => srDC.SupportConcept.SupportConceptOid == ViewModel.DataContract.SupportConceptOid && relVM.CostBearer.CostBearerOid == srDC.CostBearer.CostBearerOid); } return false; } private bool HasServiceRecords(SupportConceptVM vm) { var records = GetServiceRecords(); if (records != null && records.Count > 0) { return records.Where(srDC => srDC.SupportConcept != null).Any(srDC => srDC.SupportConcept.SupportConceptOid == vm.DataContract.SupportConceptOid); } return false; } private void ReloadViewModel(long pOID) { var updatedTasks = ViewModel.Tasks.VMList.Where(w => !w.IsNew && w.IsDirty).ToList(); var newTasks = ViewModel.Tasks.CopyToDCList(true).Where(w => !w.SchedulerAppointmentOid.HasValue).ToList(); var updatedTaskDCs = new List(); foreach (var t in updatedTasks) { t.CommitToDataContract(); updatedTaskDCs.Add(t.DataContract); } ServiceFacade.DoResourceServiceAsync(s => s.DeleteSchedulerAppointments(_DeletedTasks.ToDictionary(d => d.SchedulerAppointmentOid.Value, d => d.NewSchedulerAppointmentVersion.Value)), () => { ServiceFacade.DoResourceServiceAsync(s2 => s2.UpdateSchedulerAppointments(updatedTaskDCs), cb2 => { ServiceFacade.DoResourceServiceAsync(s => s.InsertSchedulerAppointments(newTasks), () => { this.Dispatch(() => { // reload to update version information and oid VMFactory.CreateSupportConceptVMAsync(pOID, cb => this.Dispatch(delegate { ViewModel = cb; _DeletedTasks.Clear(); FilterTreeItems(); })); }); }); }); }); } private void _PersonModalPopUp_PersonSavedOrUpdated(object sender, EventArgs e) { ServiceFacade.DoCustomerServiceAsync( s => s.LoadPersonCompact(e.Data.DataContract.PersonOid.Value), p => this.Dispatch( delegate { var cbRelVM = tabcontrol_costbearers.SelectedItem as SupportConceptCostBearerRelVM; cbRelVM.CostBearerContactPerson = p; MainControl.CloseCurrentPopUp(); })); } private void add_edit_employee_Click(object sender, RoutedEventArgs e) { employeeEditFlag = true; popup_employee.IsOpen = true; } private void btn_deleteApprovalPeriod_Click(object sender, RoutedEventArgs e) { var vm = ((Button)sender).Tag as SupportConceptApprovalPeriodVM; var cbRelVM = tabcontrol_costbearers.SelectedItem as SupportConceptCostBearerRelVM; if (cbRelVM.ApprovalPeriodList.VMList.Count == 1) { MessageBox.Show("Diese Bewilligungsperiode kann nicht gelöscht werden da mindestens eine vorhanden sein muss."); return; } cbRelVM.ApprovalPeriodList.VMList.Remove(vm); } private void btn_deleteCBRel_Click(object sender, RoutedEventArgs e) { var cbRelVM = tabcontrol_costbearers.SelectedItem as SupportConceptCostBearerRelVM; if (HasServiceRecords(cbRelVM)) { MessageBox.Show(Translator.Translate( "Für diesen Kostenträger wurden bereits Leistungen hinterlegt. Sie müssen diese Leistungen erst löschen bevor Sie den Kostenträger entfernen können."), "Löschen", MessageBoxButton.OK, MessageBoxImage.Exclamation); return; } ViewModel.CostBearerRelations.VMList.Remove(cbRelVM); } private void button_addApprovalPeriod_Click(object sender, RoutedEventArgs e) { AddNewApprovalPeriod(((Button)sender).Tag as SupportConceptCostBearerRelVM); } private static void AddNewApprovalPeriod(SupportConceptCostBearerRelVM vm) { //var cbRelVM = this.tabcontrol_costbearers.SelectedItem as SupportConceptCostBearerRelVM; //var actual = cbRelVM.ApprovalPeriodList.VMList.OrderByDescending(i => i.StartDate).FirstOrDefault(); //if (actual != null) //{ // vm.ApprovalPeriodList.NewVM.StartDate = vm.StartDate; // vm.ApprovalPeriodList.NewVM.EndDate = vm.EndDate; // vm.ApprovalPeriodList.NewVM.ApprovedBEInterval = actual.ApprovedBEInterval; // vm.ApprovalPeriodList.NewVM.ApprovedBEPerInterval = actual.ApprovedBEPerInterval; // vm.ApprovalPeriodList.NewVM.ApprovedBETotal = actual.ApprovedBETotal; // vm.ApprovalPeriodList.NewVM.ApprovedFixedAmount = actual.ApprovedFixedAmount; // vm.ApprovalPeriodList.NewVM.ApprovedFixedAmountInterval = actual.ApprovedFixedAmountInterval; // vm.ApprovalPeriodList.NewVM.IsApprovedBEShifting = actual.IsApprovedBEShifting; // vm.ApprovalPeriodList.NewVM.IsApprovedFixedAmountShifting = actual.IsApprovedFixedAmountShifting; // vm.ApprovalPeriodList.NewVM.MonthlyPayment = actual.MonthlyPayment; // vm.ApprovalPeriodList.NewVM.ServiceUnitName = actual.ServiceUnitName; // //actual.StartDate = DateTime.Now.Date.AddDays(1); // //actual.EndDate = vm.ApprovedEndDate; //} //else //{ vm.ApprovalPeriodList.NewVM.StartDate = vm.StartDate; vm.ApprovalPeriodList.NewVM.EndDate = vm.EndDate; vm.ApprovalPeriodList.NewVM.ApprovedBEInterval = SupportConceptApprovalInterval.Weekly; vm.ApprovalPeriodList.NewVM.IsApprovedBEShifting = true; vm.ApprovalPeriodList.NewVM.IsApprovedFixedAmountShifting = true; if (vm.CostBearer != null) { vm.ApprovalPeriodList.NewVM.ServiceUnitName = vm.CostBearer.ServiceUnitName; } //} vm.ApprovalPeriodList.AddNewVMToList(); } private void button_addCostBearer_Click(object sender, RoutedEventArgs e) { popup_costbearer.IsOpen = true; } private void Button_AddTask_Click(object sender, RoutedEventArgs e) { if (ValidationTrigger.Validate(groupbox_newTask) && ViewModel.DataContract.SupportConceptOid.HasValue) { //ServiceFacade.DoCustomerServiceAsync(s => s.LoadCompactSupportConceptDC(ViewModel.DataContract.SupportConceptOid.Value, null), sc => //{ // this.Dispatch(() => // { var csc = new CompactSupportConceptDC(); csc.SupportConceptOid = ViewModel.DataContract.SupportConceptOid.Value; ViewModel.Tasks.NewVM.SupportConceptList.Add(csc); ViewModel.Tasks.NewVM.IsTask = true; ViewModel.Tasks.NewVM.AllDay = true; if (ViewModel.Tasks.NewVM.DueDate == null) { ViewModel.Tasks.NewVM.Start = DateTime.Today; ViewModel.Tasks.NewVM.End = new DateTime(9999, 12, 31, 0, 0, 0); } else { var end = ViewModel.Tasks.NewVM.DueDate.Value.AddDays(1); ViewModel.Tasks.NewVM.Start = DateTime.Today; ViewModel.Tasks.NewVM.End = end; } ViewModel.Tasks.AddNewVMToList(); ViewModel.Tasks.NewVM.EmployeeList.Add(new Employee2SchedulerAppointmentDC { Employee = BeWoApp.CompactLoggedOnEmployee }); // }); //}); } } private void Button_AddEmployee_Click(object sender, RoutedEventArgs e) { popup_employee.IsOpen = true; } private void button_addAllEmployee_Click(object sender, RoutedEventArgs e) { if (MessageBox.Show("Wollen Sie die Aufgabe " + Translator.Translate("jedem Mitarbeiter") + " zuordnen?", "Achtung", MessageBoxButton.YesNo, MessageBoxImage.Exclamation) == MessageBoxResult.Yes) { var allEmployee = ServiceFacade.DoEmployeeServiceSync(s => s.GetAllActiveEmployeesCompact()); //var relations = SelectedApprovalPeriodVM.SupportConceptApprovalEmployeeRelations; foreach (var emp in allEmployee) { if (employeeEditFlag) { var data = grid_tasks.View.FocusedRowData; if (data?.RowHandle != null) { var vm = grid_tasks.GetRow(data.RowHandle.Value) as SchedulerAppointmentVM; if (!vm.EmployeeList.Exists(i => i.Employee.EmployeeOid.Equals(emp.EmployeeOid))) { vm.EmployeeList.Add(new Employee2SchedulerAppointmentDC { Employee = emp }); } } } else if (!ViewModel.Tasks.NewVM.EmployeeList.Exists(i => i.Employee.EmployeeOid.Equals(emp.EmployeeOid))) { ViewModel.Tasks.NewVM.EmployeeList.Add(new Employee2SchedulerAppointmentDC { Employee = emp }); } } employeeEditFlag = false; } } private readonly List _DeletedTasks = new List(); private void Button_RemoveTask_Click(object sender, RoutedEventArgs e) { var test = grid_tasks.GetCurrentValue(); if (test.DataContract?.SchedulerAppointmentOid != null) { _DeletedTasks.AddIfNotIn(test.CommitToDataContract()); } ViewModel.Tasks.VMList.Remove(test); BeWoWpfUtils.RefreshDXGrid(grid_tasks); } private void Button_Remove_Edit_Employee_Click(object sender, RoutedEventArgs e) { var data = grid_tasks.View.FocusedRowData; if (data?.RowHandle != null) { var vm = grid_tasks.GetRow(data.RowHandle.Value) as SchedulerAppointmentVM; vm?.EmployeeList.Remove((Employee2SchedulerAppointmentDC)((Button)sender).Tag); } } private void Button_Remove_Employee_Click(object sender, RoutedEventArgs e) { ViewModel.Tasks.NewVM.EmployeeList.Remove((Employee2SchedulerAppointmentDC)((Button)sender).Tag); } private void personsearchview_CostBearerContactPersonSelected(object sender, EventArgs e) { popup_person.IsOpen = false; personsearchview.ItemSelected -= personsearchview_CostBearerContactPersonSelected; var cbRelVM = tabcontrol_costbearers.SelectedItem as SupportConceptCostBearerRelVM; cbRelVM.CostBearerContactPerson = e.Data; } private long newPersonOid = 0; private void popupedit_costBearerContactPersonSearch_NewClick(object sender, RoutedEventArgs e) { if (ViewModel.IsNew) { MessageBox.Show("Bevor Sie eine neue Person anlegen können, muss dieser Datensatz zuerst gespeichert werden.", "Erst speichern bitte", MessageBoxButton.OK, MessageBoxImage.Information); return; } else { newPersonOid = 0L; VMFactory.CreatePersonVMAsync( cb => this.Dispatch( () => BeWoUtils.OpenModalViewWindow(cb, this, () => this.Dispatch( delegate { if (newPersonOid > 0) { var newPerson = new CompactPersonDC(); //ServiceFacade.DoCustomerServiceSync(s => newPersonOid = s.InsertNewPerson(cb.CommitToDataContract())); ServiceFacade.DoCustomerServiceSync(s => newPerson = s.LoadPersonCompact(newPersonOid)); ((SupportConceptCostBearerRelVM)tabcontrol_costbearers.SelectedItem).CostBearerContactPerson = null; ((SupportConceptCostBearerRelVM)tabcontrol_costbearers.SelectedItem).CostBearerContactPerson = newPerson; personsearchview.ObjectList.Add(newPerson); } } ), personSavedOrUpdated: personModalPopUp_PersonSavedOrUpdated ))); } } private void personModalPopUp_PersonSavedOrUpdated(object sender, EventArgs e) { if (e.Data != null && e.Data.DataContract.PersonOid.HasValue) { newPersonOid = e.Data.DataContract.PersonOid.Value; } } private void popupedit_costBearerContactPersonSearch_PopUpClick(object sender, RoutedEventArgs e) { personsearchview.ItemSelected += personsearchview_CostBearerContactPersonSelected; popup_person.IsOpen = true; } private void popupedit_costBearer_PopUpClick(object sender, RoutedEventArgs e) { // sccbrvm = (SupportConceptCostBearerRelVM)((Control)sender).Tag; // popup_costbearer.IsOpen = true; } private void popupedit_customer_PopUpClick(object sender, RoutedEventArgs e) { popup_customer.IsOpen = true; } private void popupedit_employee_PopUpClick(object sender, RoutedEventArgs e) { popup_employee.IsOpen = true; } private void tabitem_documents_Selected(object sender, RoutedEventArgs e) { if (ViewModel.IsNew) { MessageBox.Show("Bevor zu einem Datensatz Dokumente hinterlegt werden können, muss dieser gespeichert werden.", "Erst speichern bitte", MessageBoxButton.OK, MessageBoxImage.Information); return; } if (tabitem_documents.Content == null) { tabitem_documents.Content = new BeWoFileView(TableID.SupportConcept, ViewModel.DataContract.SupportConceptOid.Value); } } //private void tabitem_goalsNeu_selected(object sender, RoutedEventArgs e) //{ // //if (ViewModel.IsNew) // //{ // // MessageBox.Show("Bevor Sie Angaben zum Schulbegleitenden Dienst hinterlegen können, muss dieser Datensatz zuerst gespeichert werden.", "Erst speichern bitte", MessageBoxButton.OK, MessageBoxImage.Information); // // return; // //} // if (GridGoals.Children.Count == 0) // { // GridGoals.Children.Add(new SupportConceptGoalView(ViewModel)); // } //} // Kann das weg? private void ContextMenu_Click(object sender, RoutedEventArgs e) { //###IndServices //if (e.OriginalSource is MenuItem) //{ // var twi = e.OriginalSource as MenuItem; // ServiceCategoryTreeItem selectedItem = this.treeview_individualServiceAccountings.SelectedItem as ServiceCategoryTreeItem; // if (twi.Header.Equals("Neue Leistung")) // { // this.treeview_individualServiceAccountings.ItemContainerGenerator.StatusChanged += // this.ItemContainerGenerator_StatusChanged; // ViewModel.AddIndividualService(selectedItem); // } // else if (twi.Header.Equals("Umbenennen")) // { // this.EditItem(this.treeview_individualServiceAccountings, null, selectedItem); // } // else if (twi.Header.Equals("Löschen")) // { // if (selectedItem != null && MessageBox.Show("ACHTUNG: Das Löschen von Leistungen kann nicht rückgängig gemacht werden.\n" + // "Alle verknüpften Eintragungen in der Zeiterfassung bleiben erhalten.\n\n" + // "Wollen Sie die Leistung '" + selectedItem.Name + "' wirklich löschen?", "Löschen bestätigen", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) // { // ViewModel.DeleteIndividualService(selectedItem); // } // } //} } private void ItemContainerGenerator_StatusChanged(object sender, EventArgs e) { //###IndServices //var ig = (ItemContainerGenerator)sender; //if (ig.Status != GeneratorStatus.ContainersGenerated) //{ // return; //} //var n = ig.ContainerFromIndex(this.treeview_individualServiceAccountings.Items.Count - 1) as TreeViewItem; //if (n != null) //{ // n.IsSelected = true; // new DispatcherTimer( // TimeSpan.FromMilliseconds(200), // DispatcherPriority.Background, // (s1, e1) => // { // ServiceCategoryTreeItem item = ig.ItemFromContainer(n) as ServiceCategoryTreeItem; // this.EditItem(this.treeview_individualServiceAccountings, null, item); // ((DispatcherTimer)s1).Stop(); // }, // this.Dispatcher).Start(); //} //this.treeview_individualServiceAccountings.ItemContainerGenerator.StatusChanged -= this.ItemContainerGenerator_StatusChanged; } private void ContextMenu_Opened(object sender, RoutedEventArgs e) { //if (e.OriginalSource is ContextMenu) //{ // ContextMenu menu = e.OriginalSource as ContextMenu; // ServiceAccountingVM folder = this.treeview_individualServiceAccountings.SelectedItem as ServiceAccountingVM; // foreach (var item in menu.Items) // { // if (item is MenuItem) // { // MenuItem menuitem = item as MenuItem; // if (menuitem.Header.Equals("Umbenennen")) // menuitem.IsEnabled = true; // } // } //} } private void TextBox_KeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Return) { UpdateSelectedTreeItemText((TextBox)sender); } } private void TextBox_LostFocus(object sender, RoutedEventArgs e) { UpdateSelectedTreeItemText((TextBox)sender); } private static void UpdateSelectedTreeItemText(TextBoxBase textBox) { if (!textBox.IsReadOnly) { textBox.Background = Brushes.Transparent; textBox.IsReadOnly = true; textBox.BorderThickness = new Thickness(0); textBox.Padding = new Thickness(1, 3, 1, 3); } } // scheint nicht mehr genutzt zu werden private void TreeViewItem_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e) { var source = e.OriginalSource as DependencyObject; while (source != null && !(source is TreeViewItem)) { source = VisualTreeHelper.GetParent(source); } if (source != null) { ((TreeViewItem)source).IsSelected = true; //this._SelectedTreeNode = (TreeViewItem)source; } else { //this._SelectedTreeNode = null; } } private void GoalTreeViewItem_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e) { var source = e.OriginalSource as DependencyObject; while (source != null && !(source is TreeViewItem)) { source = VisualTreeHelper.GetParent(source); } if (source != null) { ((TreeViewItem)source).IsSelected = true; _SelectedGoalTreeNode = (TreeViewItem)source; } else { _SelectedGoalTreeNode = null; } } private void ContextMenuGoals_Click(object sender, RoutedEventArgs e) { if (!(e.OriginalSource is MenuItem twi)) return; var selectedItem = treeview_Goals.SelectedItem as SupportConceptGoalTreeItem; switch (twi.Header) { case "Neues individuelles Ziel": if (_SelectedGoalTreeNode != null) { ViewModel.AddTreeItemWithControl(selectedItem, ValueListEntryType.SupportConceptIndividualGoalCategoryType, "Ziel hinzufügen"); } break; case "Neue individuelle Maßnahme": if (_SelectedGoalTreeNode != null) { ViewModel.AddTreeItemWithControl(selectedItem, ValueListEntryType.SupportConceptIndividualGoalType, "Maßnahme hinzufügen"); } break; case "Löschen": if (selectedItem != null) { var zielOderMassnahme = selectedItem.GoalEntryVM.Type == ValueListEntryType.SupportConceptGoalCategoryType || selectedItem.GoalEntryVM.Type == ValueListEntryType.SupportConceptIndividualGoalCategoryType ? "das Ziel" : "die Maßnahme"; var pluralendung = zielOderMassnahme.Equals("das Ziel") ? "en" : "n"; if (MessageBox.Show("ACHTUNG: Das Löschen von " + zielOderMassnahme.Substring(4) + pluralendung + " kann nicht rückgängig gemacht werden.\n" + "Alle verknüpften Eintragungen in der Zeiterfassung bleiben erhalten.\n\n" + "Wollen Sie " + zielOderMassnahme + " '" + selectedItem.GoalEntryVM?.DisplayName + "' wirklich löschen?", "Löschen bestätigen", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) { ViewModel.DeleteIndividualGoal(selectedItem); } } break; case "Bearbeiten": if (selectedItem != null) ViewModel.EditTreeItem(selectedItem.GoalEntryVM); break; } } private void ContextMenuGoals_Opened(object sender, RoutedEventArgs e) { if (e.OriginalSource is ContextMenu) { var menu = e.OriginalSource as ContextMenu; var goal = treeview_Goals.SelectedItem as SupportConceptGoalTreeItem; foreach (var menuitem in menu.Items.OfType().Select(item => item)) { if (menuitem.Header.Equals("Bearbeiten")) { menuitem.IsEnabled = goal != null && (goal.GoalType.Equals(ValueListEntryType.SupportConceptIndividualGoalCategoryType) || goal.GoalType.Equals(ValueListEntryType.SupportConceptIndividualGoalType)); } else if (menuitem.Header.Equals("Neues individuelles Ziel") || menuitem.Header.Equals("Neue individuelle Maßnahme")) { menuitem.IsEnabled = goal != null && (goal.GoalType.Equals(ValueListEntryType.SupportConceptIndividualGoalCategoryType) || goal.GoalType.Equals(ValueListEntryType.SupportConceptGoalCategoryType)); } else if (menuitem.Header.Equals("Löschen")) { menuitem.IsEnabled = goal != null && (goal.GoalType.Equals(ValueListEntryType.SupportConceptIndividualGoalCategoryType) || goal.GoalType.Equals(ValueListEntryType.SupportConceptIndividualGoalType)); } } } } #endregion private void CboServiceCategory_OnInitialized(object sender, EventArgs e) { var cbo = sender as ComboBoxEdit; if (cbo != null) { Cache.GetInstance().GetServiceCategoryDescriptionDict( cb => cbo.Dispatch(delegate { cbo.ItemsSource = cb.Keys.Where(cat => cat.ScopeType == ScopeTypeId.Global).ToList(); })); } } private void ButtonInfo_OnClick(object sender, RoutedEventArgs e) { var btn = sender as Button; var bc = btn.TemplatedParent as ButtonContainer; if (bc != null) { var bi = bc.Content as ButtonInfo; if (bi != null) { var vm = bi.Tag as SupportConceptApprovalPeriodVM; if (vm != null) { vm.ServiceCategory = null; } } } } private void Popupedit_employee_OnPreviewMouseDoubleClick(object sender, MouseButtonEventArgs e) { // EmployeeView if (!BeWoUtils.CheckPopupEditClickableSpace((PopUpEdit)sender, e) || ViewModel.Originator == null || !BeWoApp.LoggedOnUser.HasRight(UserRightType.EmployeeView_View)) { return; } VMFactory.CreateEmployeeVMAsync(ViewModel.Originator.EmployeeOid, cb => this.Dispatch( () => BeWoUtils.OpenModalViewWindow(cb, this, () => this.Dispatch(() => BeWoUtils.UpdateAllViews(ViewModel.Originator))))); } private void Popupedit_customer_OnPreviewMouseDoubleClick(object sender, MouseButtonEventArgs e) { // CustomerView if (!BeWoUtils.CheckPopupEditClickableSpace((PopUpEdit)sender, e) || ViewModel.Customer == null || !BeWoApp.LoggedOnUser.HasRight(UserRightType.CustomerView_View)) { return; } VMFactory.CreateCustomerVMAsync(ViewModel.Customer.CustomerOid, cb => this.Dispatch( () => BeWoUtils.OpenModalViewWindow(cb, this, () => this.Dispatch(() => BeWoUtils.UpdateAllViews(ViewModel.Customer))))); } private void Popupedit_costBearerContactPersonSearch_OnPreviewMouseDoubleClick(object sender, MouseButtonEventArgs e) { var contactPerson = ((SupportConceptCostBearerRelVM)tabcontrol_costbearers.SelectedItem).CostBearerContactPerson; if (!BeWoUtils.CheckPopupEditClickableSpace((PopUpEdit)sender, e) || contactPerson == null || !BeWoApp.LoggedOnUser.HasRight(UserRightType.PersonView_View)) { return; } VMFactory.CreatePersonVMAsync(contactPerson.PersonOid, cb => this.Dispatch( () => BeWoUtils.OpenModalViewWindow(cb, this, () => this.Dispatch(() => BeWoUtils.UpdateAllViews(contactPerson)), personSavedOrUpdated: _PersonModalPopUp_PersonSavedOrUpdated))); } private void DoubleClickHandler(object sender, MouseButtonEventArgs e) { var selectedEmployee = ((ListBoxItem)sender).Content as CompactEmployeeDC; if (selectedEmployee == null || !BeWoApp.LoggedOnUser.HasRight(UserRightType.EmployeeView_View)) { return; } VMFactory.CreateEmployeeVMAsync(selectedEmployee.EmployeeOid, cb => this.Dispatch( () => BeWoUtils.OpenModalViewWindow(cb, this, () => this.Dispatch(() => BeWoUtils.UpdateAllViews(selectedEmployee))))); } private void Control_OnPreviewMouseDoubleClick(object sender, MouseButtonEventArgs e) { var label = sender as Label; var labelparent = label.Parent as StackPanel; var btn = labelparent.Children[0] as Button; var Employee = btn.Tag as CompactEmployeeDC; VMFactory.CreateEmployeeVMAsync(Employee.EmployeeOid, cb => this.Dispatch( () => BeWoUtils.OpenModalViewWindow(cb, this, () => this.Dispatch(() => BeWoUtils.UpdateAllViews(Employee))))); } private void ListItemGrid_OnLoaded(object sender, RoutedEventArgs e) { var grid = sender as Grid; var vm = grid.DataContext as SupportConceptApprovalPeriodVM; if (vm != null && !SupportConceptApprovalPeriodVM.ShowContactCountFields) { grid.Children[grid.Children.Count - 2].Visibility = Visibility.Collapsed; grid.Children[grid.Children.Count - 3].Visibility = Visibility.Collapsed; grid.Children[grid.Children.Count - 4].Visibility = Visibility.Collapsed; grid.Children[grid.Children.Count - 5].Visibility = Visibility.Collapsed; } var gridControl = new GridControl(); Grid.SetRow(gridControl, 8); Grid.SetColumn(gridControl, 0); Grid.SetColumnSpan(gridControl, 7); gridControl.Margin = new Thickness(3d); var itemsSourceBinding = new Binding("SupportConceptApprovalEmployeeRelations.VMList") { Source = grid.DataContext }; gridControl.SetBinding(DataControlBase.ItemsSourceProperty, itemsSourceBinding); var gridControlVisibilityBinding = new Binding("SupportConceptApprovalEmployeeRelations.GridVisibility") { UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged, Source = grid.DataContext }; gridControl.SetBinding(VisibilityProperty, gridControlVisibilityBinding); gridControl.IsVisibleChanged += GridControl_IsVisibleChanged; var deleteColumn = new GridColumn { Header = "", FixedWidth = true, Width = 24, ReadOnly = true, CellTemplate = (DataTemplate)Resources["DeleteBtnBetreuungsschluesselDataTemplate"] }; gridControl.Columns.Add(deleteColumn); var employeeColumn = new GridColumn { Header = Translator.Translate("MitarbeiterSingular"), FieldName = "EmployeeString", AllowEditing = DefaultBoolean.False, Width = 250 }; var allowEditingBetreuungsschluesselColumn = BeWoApp.HasLoggedOnUserRight(new[] { UserRightType.EditAll, UserRightType.Betreuungsschluessel_Edit }) ? DefaultBoolean.True : DefaultBoolean.False; var betreuungsschluesselColumn = new GridColumn { Name = "ColumnBSProzent", Header = "Anteil an der Betreuung", FieldName = "Betreuungsschluessel", AllowEditing = allowEditingBetreuungsschluesselColumn, Width = 170, EditSettings = new TextEditSettings { MaskUseAsDisplayFormat = true, MaskType = MaskType.Numeric, Mask = "########0.00" } }; //var betreuungsschluesselColumnAbsolut = new GridColumn { Name = "ColumnBSAbsolut", Header = "Betreuung in Minuten", FieldName = "Betreuungsschluessel", AllowEditing = allowEditingBetreuungsschluesselColumn, Width = 170, EditSettings = new TextEditSettings { MaskUseAsDisplayFormat = true, MaskType = MaskType.Numeric, Mask = "########0" } }; //betreuungsschluesselColumnAbsolut.Visible = false; gridControl.Columns.Add(employeeColumn); gridControl.Columns.Add(betreuungsschluesselColumn); //gridControl.Columns.Add(betreuungsschluesselColumnAbsolut); gridControl.View = new TableView { AutoWidth = false, ShowGroupPanel = false, ShowGroupedColumns = false, ShowTotalSummary = false, NavigationStyle = GridViewNavigationStyle.Cell }; grid.Children.Add(gridControl); } private void GridControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e) { if ((bool)e.NewValue) { GridControl gc = sender as GridControl; var list = gc.ItemsSource as BindingList; bool isAbsolute = false; if (list != null && list.Count > 0) { isAbsolute = list[0].IsAbsolut; } if (isAbsolute) { gc.Columns[2].Header = "Betreuung in Minuten"; ((TextEditSettings)gc.Columns[2].EditSettings).Mask = "########0"; } else { gc.Columns[2].Header = "Anteil an der Betreuung (%)"; ((TextEditSettings)gc.Columns[2].EditSettings).Mask = "########0.00"; } } } private void ChangeCostbearerBtn_Click(object sender, RoutedEventArgs e) { supportConceptCostBearerRel2Change = (SupportConceptCostBearerRelVM)((Button)sender).Tag; isChangingCostbearer = true; popup_costbearer.IsOpen = true; } private void button_checkAllGoals_Click(object sender, RoutedEventArgs e) { CheckAllGoalTreeItems(true); } private void button_uncheckAllGoals_Click(object sender, RoutedEventArgs e) { CheckAllGoalTreeItems(false); } private void button_aufklappenAllGoals_Click(object sender, RoutedEventArgs e) { SwitchAllGoalTreeItems(true); } private void button_zuklappenAllGoals_Click(object sender, RoutedEventArgs e) { SwitchAllGoalTreeItems(false); } private void button_checkAllLeistungen_Click(object sender, RoutedEventArgs e) { CheckAllLeistungTreeItems(true); } private void button_uncheckAllLeistungen_Click(object sender, RoutedEventArgs e) { CheckAllLeistungTreeItems(false); } private void button_aufklappenAllLeistungen_Click(object sender, RoutedEventArgs e) { SwitchAllLeistungTreeItems(true); } private void button_zuklappenAllLeistungen_Click(object sender, RoutedEventArgs e) { SwitchAllLeistungTreeItems(false); } private void CheckAllLeistungTreeItems(bool check) { var allItems = treeview_serviceAccountings.ItemsSource as IList; foreach (var item in allItems) { item.IsChecked = check; } } private void SwitchAllLeistungTreeItems(bool check) { Style stylee = new Style { TargetType = typeof(TreeViewItem) }; stylee.Setters.Add(new Setter(TreeViewItem.IsExpandedProperty, check)); treeview_serviceAccountings.ItemContainerStyle = stylee; } private void SwitchAllGoalTreeItems(bool check) { Style stylee = new Style { TargetType = typeof(TreeViewItem) }; stylee.Setters.Add(new Setter(TreeViewItem.IsExpandedProperty, check)); treeview_Goals.ItemContainerStyle = stylee; } private void CheckAllGoalTreeItems(bool check) { foreach (var item in treeview_Goals.ItemsSource) { ((SupportConceptGoalTreeItem)item).IsChecked = check; } } private void button_openAddBetreuungsschluessel_Click(object sender, RoutedEventArgs e) { popup_newBetreuungsschluessel.IsOpen = true; var btn = (Button)sender; var grid = (Grid)btn.Parent; var border = (Border)grid.Parent; var contentPresenter = (ContentPresenter)border.TemplatedParent; SelectedApprovalPeriodVM = (SupportConceptApprovalPeriodVM)contentPresenter.Content; if (SelectedApprovalPeriodVM != null) { bool isabsolute = false; if (SelectedApprovalPeriodVM.SupportConceptApprovalEmployeeRelations.VMList.Count == 0) { RadioAbsolPro.Visibility = Visibility.Visible; RadioProzent.IsChecked = true; SelectedApprovalPeriodVM.SupportConceptApprovalEmployeeRelations.NewVM.Betreuungsschluessel = 100; } else { RadioAbsolPro.Visibility = Visibility.Collapsed; if (SelectedApprovalPeriodVM.SupportConceptApprovalEmployeeRelations.VMList.Last().IsAbsolut) { isabsolute = true; SelectedApprovalPeriodVM.SupportConceptApprovalEmployeeRelations.NewVM.IsAbsolut = true; //var cbRelVM = this.tabcontrol_costbearers.SelectedItem as SupportConceptCostBearerRelVM; //var actual = cbRelVM.ApprovalPeriodList.VMList.OrderByDescending(i => i.StartDate).FirstOrDefault(); decimal max = 0; if (SelectedApprovalPeriodVM.ApprovedBEPerInterval.HasValue) { max = SelectedApprovalPeriodVM.ApprovedBEPerInterval.Value * 60; editAbsolut.MaxValue = max; } var alt = SelectedApprovalPeriodVM.SupportConceptApprovalEmployeeRelations.VMList.Sum( s => s.Betreuungsschluessel); if (alt > max) alt = max; SelectedApprovalPeriodVM.SupportConceptApprovalEmployeeRelations.NewVM.Betreuungsschluessel = (int)(max - alt); } else { SelectedApprovalPeriodVM.SupportConceptApprovalEmployeeRelations.NewVM.IsAbsolut = false; var alt = SelectedApprovalPeriodVM.SupportConceptApprovalEmployeeRelations.VMList.Sum(s => s.Betreuungsschluessel); if (alt > 100) alt = 100; SelectedApprovalPeriodVM.SupportConceptApprovalEmployeeRelations.NewVM.Betreuungsschluessel = 100 - alt; } } if (isabsolute) { LabelProzentual.Visibility = Visibility.Collapsed; LabelAbsolut.Visibility = Visibility.Visible; editProzentual.Visibility = Visibility.Collapsed; editAbsolut.Visibility = Visibility.Visible; } else { LabelProzentual.Visibility = Visibility.Visible; LabelAbsolut.Visibility = Visibility.Collapsed; editProzentual.Visibility = Visibility.Visible; editAbsolut.Visibility = Visibility.Collapsed; } } } private void button_addBetreuungsschluessel_Click(object sender, RoutedEventArgs e) { if (SelectedApprovalPeriodVM != null && Validate(groupbox_newBetreuungsschluessel)) { if (SelectedApprovalPeriodVM.SupportConceptApprovalEmployeeRelations.NewVM.IsAbsolut) { var alt = SelectedApprovalPeriodVM.SupportConceptApprovalEmployeeRelations.VMList.Sum(s => s.Betreuungsschluessel); if (editAbsolut.MaxValue.HasValue) { if (alt + SelectedApprovalPeriodVM.SupportConceptApprovalEmployeeRelations.NewVM.Betreuungsschluessel > editAbsolut.MaxValue) { MessageBox.Show(String.Format("Die Summe der Anteile liegt bei über {0:0} Minuten. Hinzufügen nicht möglich.", editAbsolut.MaxValue), "Fehler", MessageBoxButton.OK, MessageBoxImage.Warning); return; } } } else { var alt = SelectedApprovalPeriodVM.SupportConceptApprovalEmployeeRelations.VMList.Sum(s => s.Betreuungsschluessel); if (alt + SelectedApprovalPeriodVM.SupportConceptApprovalEmployeeRelations.NewVM.Betreuungsschluessel > 100) { MessageBox.Show("Die Summe der Anteile liegt bei über 100%. Hinzufügen nicht möglich.", "Fehler", MessageBoxButton.OK, MessageBoxImage.Warning); return; } } SelectedApprovalPeriodVM.SupportConceptApprovalEmployeeRelations.AddNewVMToList(); } SelectedApprovalPeriodVM = null; popup_newBetreuungsschluessel.IsOpen = false; } private void button_cancelBetreuungsschluessel_Click(object sender, RoutedEventArgs e) { popup_newBetreuungsschluessel.IsOpen = false; SelectedApprovalPeriodVM = null; } private void popupedit_betreuungsschluessel_PopUpClick(object sender, RoutedEventArgs e) { popup_employee2.IsOpen = true; } private void Popupedit_betreuungsschluessel_OnPreviewMouseDoubleClick(object sender, MouseButtonEventArgs e) { if (!BeWoUtils.CheckPopupEditClickableSpace((PopUpEdit)sender, e) || SelectedApprovalPeriodVM.SupportConceptApprovalEmployeeRelations.NewVM.Employee == null || !BeWoApp.LoggedOnUser.HasRight(UserRightType.EmployeeView_View)) { return; } VMFactory.CreateEmployeeVMAsync(SelectedApprovalPeriodVM.SupportConceptApprovalEmployeeRelations.NewVM.Employee.EmployeeOid, cb => this.Dispatch( () => BeWoUtils.OpenModalViewWindow(cb, this, () => this.Dispatch(() => BeWoUtils.UpdateAllViews(SelectedApprovalPeriodVM.SupportConceptApprovalEmployeeRelations.NewVM.Employee))))); } private void EmployeeSearchView_EmployeeSelected2(object sender, EventArgs e) { if (SelectedApprovalPeriodVM.SupportConceptApprovalEmployeeRelations.VMList.Any(a => a.Employee.EmployeeOid.Equals(e.Data.EmployeeOid))) { MessageBox.Show("Sie können " + Translator.Translate("einen Betreuer") + " nicht mehrmals hinzufügen.", "Ungültige Auswahl", MessageBoxButton.OK, MessageBoxImage.Warning); return; } popup_employee2.IsOpen = false; SelectedApprovalPeriodVM.SupportConceptApprovalEmployeeRelations.NewVM.Employee = e.Data; popup_newBetreuungsschluessel.Focus(); } public event PropertyChangedEventHandler PropertyChanged; [NotifyPropertyChangedInvocator] protected virtual void OnPropertyChanged(string propertyName) { var handler = PropertyChanged; if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); } private void DeleteBetreuungsschluesselButton_Click(object sender, RoutedEventArgs e) { var btn = (Button)sender; var currentObject = (SupportConceptApprovalPeriodEmployeeRelVM)((EditGridCellData)btn.Tag).RowData.Row; var supportConceptCostBearerRel = ViewModel.CostBearerRelations.VMList.FirstOrDefault(f => f.ApprovalPeriodList.VMList.Any(a => a.SupportConceptApprovalEmployeeRelations.VMList.Contains(currentObject))); var approvalPeriod = supportConceptCostBearerRel.ApprovalPeriodList.VMList.FirstOrDefault(f => f.SupportConceptApprovalEmployeeRelations.VMList.Contains(currentObject)); approvalPeriod.SupportConceptApprovalEmployeeRelations.VMList.Remove(currentObject); var abc = SelectedApprovalPeriodVM; } private void ToggledProz_OnChecked(object sender, RoutedEventArgs e) { LabelProzentual.Visibility = Visibility.Visible; LabelAbsolut.Visibility = Visibility.Collapsed; editProzentual.Visibility = Visibility.Visible; editAbsolut.Visibility = Visibility.Collapsed; SelectedApprovalPeriodVM.SupportConceptApprovalEmployeeRelations.NewVM.IsAbsolut = false; SelectedApprovalPeriodVM.SupportConceptApprovalEmployeeRelations.NewVM.Betreuungsschluessel = 100; } private void ToggledAbsol_OnChecked(object sender, RoutedEventArgs e) { var cbRelVM = this.tabcontrol_costbearers.SelectedItem as SupportConceptCostBearerRelVM; var actual = SelectedApprovalPeriodVM ?? cbRelVM.ApprovalPeriodList.VMList.OrderByDescending(i => i.StartDate).FirstOrDefault(); if (actual.ApprovedBEPerInterval.HasValue) { editAbsolut.MaxValue = actual.ApprovedBEPerInterval * 60; } SelectedApprovalPeriodVM.SupportConceptApprovalEmployeeRelations.NewVM.Betreuungsschluessel = editAbsolut.MaxValue ?? 0; LabelProzentual.Visibility = Visibility.Collapsed; LabelAbsolut.Visibility = Visibility.Visible; editProzentual.Visibility = Visibility.Collapsed; editAbsolut.Visibility = Visibility.Visible; SelectedApprovalPeriodVM.SupportConceptApprovalEmployeeRelations.NewVM.IsAbsolut = true; } private void Tabitem_tasks_OnSelected(object sender, RoutedEventArgs e) { if (ViewModel.IsNew) { tabitem_grid_tasks.Visibility = Visibility.Collapsed; MessageBox.Show("Bevor zu einem Datensatz Aufgaben angelegt werden können, muss dieser gespeichert werden.", "Erst speichern bitte", MessageBoxButton.OK, MessageBoxImage.Information); return; } tabitem_grid_tasks.Visibility = Visibility.Visible; } private void RadioButton_Checked(object sender, RoutedEventArgs e) { var check = (RadioButton)sender; var selected = (SupportConceptApprovalPeriodVM)check.Tag; switch (check.Name) { case "RadioButtonBudget": selected.Bewilligungsart = Bewilligungsart.Budget; break; case "RadioButtonDirekt": selected.Bewilligungsart = Bewilligungsart.Direkt; break; } } private void BtnEditRating_Click(object sender, RoutedEventArgs e) { var btn = sender as Button; if (btn != null) { var rating = btn.Tag as RatingVM; if (rating != null) { var ratingCopy = CopyRatingVM(rating); var changed = EditRating(ratingCopy); if (changed != null) { rating.StartDate = changed.StartDate; rating.DisplayName = changed.DisplayName; rating.Notice = changed.Notice; rating.RTFNotice = changed.RTFNotice; rating.RatingId = changed.RatingId; rating.GoalRatingList.VMList.Clear(); foreach (var goalRatingVm in changed.GoalRatingList.VMList) { rating.GoalRatingList.VMList.Add(goalRatingVm); } } } } } private RatingVM CopyRatingVM(RatingVM rating) { RatingDC dc = rating.DataContract; //if (rating.IsNew) //{ dc = rating.CommitToDataContract(); //} var newVm = new RatingVM(dc); return newVm; } private void BtnDeleteRating_Click(object sender, RoutedEventArgs e) { var btn = sender as Button; if (btn != null) { var rating = btn.Tag as RatingVM; ViewModel.Ratings.VMList.Remove(rating); } } private void BtnAddRating_Click(object sender, RoutedEventArgs e) { var rating = new RatingVM(new RatingDC()); rating.StartDate = DateTime.Now; foreach (var goal in ViewModel.GetSelectedGoals()) { if (goal.Type == ValueListEntryType.SupportConceptGoalCategoryType || goal.Type == ValueListEntryType.SupportConceptIndividualGoalCategoryType) { AddIfNotExist(rating, goal); } else { //Find Parent Goal if (goal.ParentOid.HasValue) { var p = ViewModel.CombinedGoals.VMList.FirstOrDefault(vm => vm.DataContract.ValueListEntryOid == goal.ParentOid); if (p != null) { AddIfNotExist(rating, p.DataContract); } } } } var savedRating = EditRating(rating); if (savedRating != null) { ViewModel.Ratings.VMList.Add(savedRating); } } private void AddIfNotExist(RatingVM rating, ValueListEntryDC goal) { if (!rating.GoalRatingList.VMList.Any(vm => vm.GoalEntry.Equals(goal))) { var gr = rating.GoalRatingList.VMList.AddNew(); gr.GoalEntry = goal; } } private RatingVM EditRating(RatingVM vm) { var control = new RatingEditView(); control.InitView(vm); var beWoWindow = new BeWoWindow { rootGroupBox = { Header = "Bewertung bearbeiten" }, Height = this.Height, Width = 1000, MinWidth = 550, WindowStartupLocation = WindowStartupLocation.CenterOwner, GroupBoxContent = control, Owner = BeWoApp.CurrentBeWo.MainWindow }; bool saved = false; control.ButtonSavedClicked += () => { saved = true; beWoWindow.Close(); }; control.ButtonCancelClicked += () => { beWoWindow.Close(); }; beWoWindow.ShowDialog(); if (!saved) { return null; } return control.ViewModel; } public void AnimateOpacity(double pOpacitiy, double pDuration) { // System.Windows.Media.TransformGroup group = this.DetailFrame.RenderTransform as System.Windows.Media.TransformGroup; // System.Windows.Media.ScaleTransform scale = group.Children[0] as System.Windows.Media.ScaleTransform; var lAnimation = new DoubleAnimation { From = root.Opacity, To = pOpacitiy, Duration = TimeSpan.FromMilliseconds(pDuration) }; // lAnimation.From = scale.ScaleX; // lAnimation.To = pOpacitiy; root.BeginAnimation(OpacityProperty, lAnimation); // scale.BeginAnimation(System.Windows.Media.ScaleTransform.ScaleXProperty, lAnimation); // scale.BeginAnimation(System.Windows.Media.ScaleTransform.ScaleYProperty, lAnimation); } private void AuswertungTab_OnSelected(object sender, RoutedEventArgs e) { //RatingView.UpdateControl(); } private void TxtSearchGoals_OnEditValueChanged(object sender, EditValueChangedEventArgs e) { FilterTreeItems(); } private void FilterTreeItems() { String searchtext = TxtSearchGoals.Text; bool onlyChecked = chkShowSelectedGoals.IsChecked.HasValue && chkShowSelectedGoals.IsChecked.Value; foreach (var goal in treeview_Goals.Items) { SetTreeItemVisibility(treeview_Goals.ItemContainerGenerator, goal as SupportConceptGoalTreeItem, searchtext, onlyChecked); //if (ig.Status != GeneratorStatus.ContainersGenerated) //{ // return; //} //var n = ig.ContainerFromIndex(this.treeview_individualServiceAccountings.Items.Count - 1) as TreeViewItem; //if (n != null) //{ // n.IsSelected = true; // new DispatcherTimer( // TimeSpan.FromMilliseconds(200), // DispatcherPriority.Background, // (s1, e1) => // { // ServiceCategoryTreeItem item = ig.ItemFromContainer(n) as ServiceCategoryTreeItem; // this.EditItem(this.treeview_individualServiceAccountings, null, item); // ((DispatcherTimer)s1).Stop(); // }, // this.Dispatcher).Start(); //} //this.treeview_individualServiceAccountings.ItemContainerGenerator.StatusChanged -= this.ItemContainerGenerator_StatusChanged; } } private void SetTreeItemVisibility(ItemContainerGenerator ig, SupportConceptGoalTreeItem goal, string searchtext, bool onlyChecked) { var item = ig.ContainerFromItem(goal) as TreeViewItem; if (item == null) { treeview_Goals.UpdateLayout(); item = ig.ContainerFromItem(goal) as TreeViewItem; } if (item == null) return; if (item.ToString().ToLower().Contains("fussball")) { int test = 0; } if (goal.Children == null || goal.Children.Count == 0) { if (IsTreeItemVisible(goal, searchtext, onlyChecked)) { item.Visibility = Visibility.Visible; } else { item.Visibility = Visibility.Collapsed; } } else { foreach (var child in goal.Items) { SetTreeItemVisibility(item.ItemContainerGenerator, child, searchtext, onlyChecked); } if (IsAtLeastOneChildVisible(goal.Items, searchtext, onlyChecked)) { item.Visibility = Visibility.Visible; } else { if (IsTreeItemVisible(goal, searchtext, onlyChecked)) { item.Visibility = Visibility.Visible; } else { item.Visibility = Visibility.Collapsed; } } } } private bool IsTreeItemVisible(SupportConceptGoalTreeItem goal, string searchtext, bool onlyChecked) { if (onlyChecked && !goal.IsChecked && goal.GoalType != ValueListEntryType.SupportConceptIndividualGoalType && goal.GoalType != ValueListEntryType.SupportConceptIndividualGoalCategoryType) { return false; } if (!String.IsNullOrEmpty(searchtext) && (String.IsNullOrEmpty(goal.DetailDescription) || !goal.DetailDescription.ToLower().Contains(searchtext.ToLower()))) { return false; } return true; } private bool IsAtLeastOneChildVisible(BindingList children, string searchtext, bool onlyChecked) { foreach (var child in children) { bool visible = IsTreeItemVisible(child, searchtext, onlyChecked) || IsAtLeastOneChildVisible(child.Items, searchtext, onlyChecked); if (visible) { return true; } } return false; } private void ChkShowSelectedGoals_OnChecked(object sender, RoutedEventArgs e) { FilterTreeItems(); } private void ChkShowSelectedGoals_OnUnchecked(object sender, RoutedEventArgs e) { FilterTreeItems(); } private void popupedit_costBearerContactPersonSearch_DeleteClick(object sender, RoutedEventArgs e) { var vm = tabcontrol_costbearers.SelectedItem as SupportConceptCostBearerRelVM; if (vm != null) { vm.CostBearerContactPerson = null; } } private void linkPdfExport_Click(object sender, RoutedEventArgs e) { var link = sender as Hyperlink; if (link != null) { var rating = link.Tag as RatingVM; if (rating != null && rating.DataContract.RatingOid.HasValue) { var url = BeWoApp.SiteOfOrigin + "/ReportView.aspx" + "?scOid=" + (this.ViewModel.DataContract.SupportConceptOid ?? 0) + "&rOid=" + (rating.DataContract.RatingOid ?? 0) + "&type=" + Utils.EnumName(ReportTypes.RatingReport); url = BeWoWpfUtils.GetHTMLEncodedURL(url); link.NavigateUri = new Uri(url); BeWoUtils.NavigateToReportUri((sender as System.Windows.Documents.Hyperlink).NavigateUri.ToString(), Translator.Translate("Bewertung")); } } } } public class ValueListEntryTypeToColorConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { var type = (ValueListEntryType)value; if (type.Equals(ValueListEntryType.SupportConceptIndividualGoalCategoryType) || type.Equals(ValueListEntryType.SupportConceptIndividualGoalType)) { return new SolidColorBrush(Colors.SteelBlue); } return new SolidColorBrush(Colors.Black); } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } }