Files
BeWoPlaner/BeWo/View/Detail/AdditionalServiceView.xaml.cs
Lyndon Jetten 23b8757ff5 FaC: Neues Scheduling-Modul hinzugefügt, aber noch lange nicht fertig.
ownChat: Neues TimeStamp-Objekt wird unterstützt und der Chat funktioniert wieder.
2024-06-05 14:45:33 +02:00

1751 lines
69 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Navigation;
using System.Windows.Threading;
using BeWo.Core;
using BeWo.Core.Service;
using BeWo.ServiceProxy;
using BeWo.Validation;
using BeWo.View.Controls;
using BeWo.View.Detail.Zeiterfassung;
using BeWo.ViewModel;
using BeWo.ViewModel.ListViewModel;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using BS.Shared.Extensions;
using BS.Shared.Translation;
using DevExpress.Xpf.Bars;
using DevExpress.Xpf.Docking;
using DevExpress.Xpf.Editors;
using DevExpress.Xpf.Grid;
using Microsoft.Win32;
using DependencyObject = System.Windows.DependencyObject;
namespace BeWo.View.Detail
{
public partial class AdditionalServiceView : INotifyPropertyChanged
{
public static Visibility InsertedOnAndByVisibility
{
get
{
return BeWoApp.AppSettings.HideServiceRecordInsertedByAndInsertedOn ? Visibility.Collapsed : Visibility.Visible;
}
}
private AdditionalServiceGroupOfPeopleView _AdditionalServiceGroupOfPeoplePopUp;
private readonly Dictionary<DayOfWeek, CheckBox> _DayBoxes = new Dictionary<DayOfWeek, CheckBox>();
private CompactEmployeeDC _SelectedEmployee;
private ServiceRecordListVM _ViewModel;
private readonly AssessmentSheetEntryView _AssessmentSheet;
private readonly Dictionary<long, CompactCustomerDC> _Oid2CustomerDict;
private readonly bool _disableTeilnehmerUpdate;
public AdditionalServiceView(ServiceRecordListVM pViewModel, IEnumerable<CompactCustomerDC> allCustomerList)
{
_disableTeilnehmerUpdate = true;
InitializeComponent();
AdditionalServiceBookings = new AdditionalServiceBookingListVM(new List<AdditionalServiceBookingDC>());
MultiAddServGroupOfPeopleSelectionControl.EditGroupButtonClicked += multiAddServGroupOfPeopleSelectionControl_EditGroupButtonClicked;
PopupContent.Visibility = Visibility.Hidden;
_Oid2CustomerDict = new Dictionary<long, CompactCustomerDC>();
if (allCustomerList != null)
{
foreach (var cdc in allCustomerList)
{
_Oid2CustomerDict.Add(cdc.CustomerOid, cdc);
}
}
ViewModel = pViewModel;
ViewModel.ShowOnlyAdditionalServiceRecords = true;
DownloadLinkEngine = new DownloadLinkEngine();
LinkExcelExport.NavigateUri = DownloadLinkEngine.GenerateNewExcelLink();
ComboboxServices.SelectionChanged += (s, e) =>
{
// TODO: löst das OnSelectionChanged-Event der NullItemCombobox-Klasse aus, die wiederum dieses Event auslöst und es letztendlich zum Stack Overflow kommt
if(ComboboxServices.SelectedIndex == -1)
{
ComboboxServices.SelectedIndex = 0;
}
};
InitDayCheckBoxes();
if (BeWoApp.LoggedOnUser.HasRight(UserRightType.AssessmentSheet_View))
{
_AssessmentSheet = new AssessmentSheetEntryView();
PunktebogenRootGrid.Children.Clear();
PunktebogenRootGrid.Children.Add(_AssessmentSheet);
_AssessmentSheet.Visibility = Visibility.Collapsed;
}
else
{
PunktebogenRootGrid.Visibility = Visibility.Collapsed;
}
MultiEmployeeControlAddServ.SelectedEmployees.CollectionChanged += multiEmployeeAddServ_CollectionChanged;
ReloadAdditionalServiceRelatedObjects();
Years = new int[10];
for (var i = (Years.Length - 1); i > -1; i--)
Years[i] = DateTime.Now.Year - i;
MonatsCombobox.DataContext = this;
JahresCombobox.DataContext = this;
TeilnahmeGrid.DataContext = this;
SelectedYear = Years[0];
SelectedMonth = (Monat) DateTime.Now.Month;
MonatsCombobox.SelectedIndex = 0;
JahresCombobox.SelectedIndex = 0;
SaveBtn.IsEnabled = false;
//SupportConceptSelectionControl.SupportConceptList = new List<CompactSupportConceptDC>();
//this.Dispatch(() => Cache.GetInstance().GetAllActiveSupportConceptsCompact(x => this.Dispatch(() => { SupportConceptSelectionControl.SupportConceptList = x; })));
ServiceFacade.DoEmployeeServiceSync(e => MultiEmployeeControlAddServ.SelectedEmployees.Add(e.LoadCompactEmployee(BeWoApp.LoggedOnEmployee.EmployeeOid.Value)));
_SelectedEmployee = MultiEmployeeControlAddServ.SelectedEmployees.First();
_disableTeilnehmerUpdate = false;
}
public event PropertyChangedEventHandler PropertyChanged;
void multiEmployeeAddServ_CollectionChanged(object sender, EventArgs e)
{
AdditionalServiceBookings.NewVM.EmployeeOidList = MultiEmployeeControlAddServ.SelectedEmployees.Select(emp => emp.EmployeeOid).ToList();
if (AdditionalServiceBookings.NewVM.EmployeeOidList.Count <= 0)
return;
//_SelectedEmployee = AdditionalServiceBookings.NewVM.EmployeeOidList.First();
//PopupeditEmployee.Text = _SelectedEmployee.ToString();
//_SelectedEmployee = null;
//PopupeditEmployee.Text = AdditionalServiceBookings.NewVM.EmployeeOidList.First().ToString();
}
public override bool CanDelete
{
get { return false; }
}
public List<AdditionalServiceDC> AdditionalServices { get; set; }
public List<AdditionalServiceRegionDC> AdditionalServiceRegions { get; set; }
public AdditionalServiceBookingListVM AdditionalServiceBookings { get; set; }
public List<AdditionalServiceNoticeDC> AdditionalServiceNoticeList { get; set; }
public int GridColumnCount { get; set; }
public int[] Years { get; set; }
private int _SelectedYear;
public int SelectedYear
{
get { return _SelectedYear; }
set
{
_SelectedYear = value;
if ((int) SelectedMonth == 0)
return;
ShouldGridBeSaved();
GridColumnCount = DateTime.DaysInMonth(value, (int)SelectedMonth);
UpdateTeilnahmeGrid();
}
}
private Monat _SelectedMonth;
public Monat SelectedMonth
{
get { return _SelectedMonth; }
set
{
ShouldGridBeSaved();
_SelectedMonth = value;
GridColumnCount = DateTime.DaysInMonth(SelectedYear, (int)value);
UpdateTeilnahmeGrid();
}
}
private List<Teilnehmer> _TeilnehmerListe;
public List<Teilnehmer> TeilnehmerListe
{
get
{
if(_TeilnehmerListe!=null)
_TeilnehmerListe.Sort((x, y) => x.Customer.LastNameFirstName.CompareTo(y.Customer.LastNameFirstName));
return _TeilnehmerListe ?? (_TeilnehmerListe = new List<Teilnehmer>());
}
set
{
_TeilnehmerListe = value;
OnPropertyChanged("TeilnehmerListe");
}
}
private List<AdditionalServiceBookingVM> _SelectedBookings;
public List<AdditionalServiceBookingVM> SelectedBookings
{
get { return _SelectedBookings; }
set
{
_SelectedBookings = value;
OnPropertyChanged("SelectedBookings");
}
}
internal void UpdateTeilnahmeGrid()
{
if (!_disableTeilnehmerUpdate)
{
ReloadAdditionalServiceBookings();
if (Angebotscombobox.SelectedItem == null)
return;
SelectedBookings =
AdditionalServiceBookings.VMList.Where(
asb =>
asb.AdditionalServiceRegion.AdditionalServiceRegionOid.Equals(
(Angebotscombobox.SelectedItem as AdditionalServiceRegionDC).AdditionalServiceRegionOid) &&
asb.Date.Year == SelectedYear &&
asb.Date.Month == (int) SelectedMonth).ToList();
TeilnehmerListe = new List<Teilnehmer>();
foreach (var booking in SelectedBookings)
{
foreach (var teilnehmer in booking.CustomerOidDict)
{
if (teilnehmer.Key == 547)
{
int test = 0;
}
var bookingRel = new Dictionary<long, BookingRelationDictionaryValue>();
var index = -1;
var anwesenheiten = new bool[GridColumnCount];
if (TeilnehmerListe.Any(t => t.Customer.CustomerOid.Equals(teilnehmer.Key)))
{
var x = TeilnehmerListe.Where(t => t.Customer.CustomerOid.Equals(teilnehmer.Key)).ToList();
anwesenheiten = x.First().TeilnahmenForUpdating;
}
anwesenheiten[booking.Date.Day - 1] = teilnehmer.Value;
foreach (var item in TeilnehmerListe.Where(item => item.Customer.CustomerOid.Equals(teilnehmer.Key)))
{
index = TeilnehmerListe.IndexOf(item);
foreach (var element in item.BookingRelation.Where(element => !bookingRel.ContainsKey(element.Key)))
bookingRel.Add(element.Key, element.Value);
}
if (!bookingRel.ContainsKey(booking.DataContract.AdditionalServiceBookingOid.Value))
bookingRel.Add(booking.DataContract.AdditionalServiceBookingOid.Value,
new BookingRelationDictionaryValue(booking.Date, booking.StartDate.Value, booking.EndDate.Value));
if (index >= 0)
TeilnehmerListe.RemoveAt(index);
CompactCustomerDC customer = null;
if (_Oid2CustomerDict.ContainsKey(teilnehmer.Key))
{
customer = _Oid2CustomerDict[teilnehmer.Key];
}
if (customer == null)
{
customer = new CompactCustomerDC {CustomerOid = 0, FirstName = "Gelöscht", AbsenceTimes = new List<AbsenceTimeDC>()};
}
//else if (customer.LastName == "Shakaev")
//{
// int test = 0;
//}
//Notice raussuchen
var region = Angebotscombobox.SelectedItem as AdditionalServiceRegionDC;
AdditionalServiceNoticeDC notice = null;
if (region != null && customer != null)
{
notice = AdditionalServiceNoticeList.Where(n => n.RegionOid == region.AdditionalServiceRegionOid && n.CustomerOid == customer.CustomerOid).FirstOrDefault();
}
if (notice == null)
{
notice = new AdditionalServiceNoticeDC();
notice.Monat = new DateTime(booking.StartDate.Value.Year, booking.StartDate.Value.Month, 1);
notice.RegionOid = region?.AdditionalServiceRegionOid;
notice.CustomerOid = customer?.Oid;
}
TeilnehmerListe.Add(new Teilnehmer(customer, anwesenheiten, bookingRel, notice));
var klienten = new Dictionary<long, bool>();
foreach (var test2 in TeilnehmerListe)
{
if (!klienten.ContainsKey(test2.Customer.CustomerOid))
{
klienten.Add(test2.Customer.CustomerOid, true);
}
else
{
//Fehler
int test = 0;
}
}
}
}
var monthInt = (int) SelectedMonth;
var daysInMonth = DateTime.DaysInMonth(SelectedYear, monthInt);
T28.Visible = daysInMonth >= 29;
T29.Visible = daysInMonth >= 30;
T30.Visible = daysInMonth == 31;
TeilnahmeGrid.ItemsSource = TeilnehmerListe;
TeilnahmeGrid.RefreshData();
foreach (var item in TeilnahmeGrid.Columns)
{
var swap = item.Header.ToString();
item.Header = "";
item.Header = swap;
}
UpdateAdditionalServiceReportUrl();
}
}
protected virtual void OnPropertyChanged(string propertyName = null)
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
private void gridView1_DoubleClick(object sender, RoutedEventArgs e)
{
var selectedCustomer = ((sender as TableView).Grid.GetFocusedRow() as Teilnehmer).Customer;
if(selectedCustomer != null)
VMFactory.CreateCustomerVMAsync(selectedCustomer.CustomerOid, cb => this.Dispatch(
() => BeWoUtils.OpenModalViewWindow<CustomerVM, CustomerDC, AdditionalServiceView>(cb, this, () => this.Dispatch(
() => BeWoUtils.UpdateAllViews(selectedCustomer)))));
}
private void pg_ShownEditor(object sender, EditorEventArgs e)
{
//if (!CheckEditRight())
//{
// e.Handled = true;
// return;
//}
if (!(e.Editor is CheckEdit))
return;
(e.Editor as CheckEdit).Tag = new CheckEditTag(e.Row as Teilnehmer, e.Column);
(e.Editor as CheckEdit).Unchecked -= checked_changed;
(e.Editor as CheckEdit).Unchecked += checked_changed;
(e.Editor as CheckEdit).Checked -= checked_changed;
(e.Editor as CheckEdit).Checked += checked_changed;
}
private bool CheckEditRight(bool showMessage)
{
if (!BeWoApp.LoggedOnUser.HasRight(UserRightType.AdditionalService_Edit))
{
if (showMessage)
{
MessageBox.Show("Sie besitzen leider nicht das benötigte Recht \"Ergänzenden Dienste bearbeiten\".", "Speichern", MessageBoxButton.OK, MessageBoxImage.Exclamation);
}
return false;
}
return true;
}
private void GridViewBase_OnHiddenEditor(object sender, EditorEventArgs e)
{
if (!(e.Editor is CheckEdit))
return;
(e.Editor as CheckEdit).Unchecked -= checked_changed;
(e.Editor as CheckEdit).Checked -= checked_changed;
}
private readonly List<AdditionalServiceBookingDC> _BookingsToUpdate = new List<AdditionalServiceBookingDC>();
private readonly List<AdditionalServiceNoticeDC> _NoticesToUpdate = new List<AdditionalServiceNoticeDC>();
private readonly List<CompactCustomerDC> _Customer2Delete = new List<CompactCustomerDC>();
private void checked_changed(object sender, RoutedEventArgs e)
{
var s = sender as CheckEdit;
var tag = s.Tag as CheckEditTag;
try
{
var relationList =
tag.Teilnehmer.BookingRelation.Where(
b => b.Value.Datum.Equals(new DateTime(SelectedYear, (int) SelectedMonth, tag.GetHeaderAsDay())));
var keyList = relationList.Where(i => i.Key > 0 && i.Value.StartDate != DateTime.MinValue).Select(j => j.Key).ToList();
//if (kvp.Key == 0 && kvp.Value.StartDate == DateTime.MinValue)
// return;
//key = kvp.Key;
if (relationList.Any())
{
var abList =
AdditionalServiceBookings.VMList.Where(asb => keyList.Contains(asb.DataContract.AdditionalServiceBookingOid.Value));
foreach (var ab in abList)
{
ab.CustomerOidDict[tag.Teilnehmer.Customer.CustomerOid] = s.IsChecked.Value;
if (!_BookingsToUpdate.Contains(ab.CommitToDataContract()))
_BookingsToUpdate.Add(ab.CommitToDataContract());
SaveBtn.IsEnabled = true;
}
}
}
catch (Exception) { return; }
}
private void SaveBookingChanges(object sender, RoutedEventArgs e)
{
SaveGridChanges(true);
}
private void SaveGridChanges(bool updateGrid)
{
Mouse.OverrideCursor = Cursors.Wait;
try
{
// do stuff
if (_BookingsToUpdate.Count == 0 && newShortAddAD.Any())
{
ServiceFacade.DoOperationsServiceSync(
o => o.InsertNewAdditionalServiceBookings(new List<AdditionalServiceBookingDC>(newShortAddAD)));
}
else if (_BookingsToUpdate.Any() && !newShortAddAD.Any())
{
ServiceFacade.DoOperationsServiceSync(o => o.UpdateAdditionalServiceBookings(_BookingsToUpdate));
}
else if (_BookingsToUpdate.Any() && newShortAddAD.Any())
{
ServiceFacade.DoOperationsServiceSync(o => o.UpdateAdditionalServiceBookings(_BookingsToUpdate));
ServiceFacade.DoOperationsServiceSync(
o => o.InsertNewAdditionalServiceBookings(new List<AdditionalServiceBookingDC>(newShortAddAD)));
}
if (_NoticesToUpdate.Count > 0)
{
ServiceFacade.DoOperationsServiceSync(o => o.UpdateAdditionalServiceNoticeList(_NoticesToUpdate));
}
if (_Customer2Delete.Count > 0)
{
var start = new DateTime(SelectedYear, (int)SelectedMonth, 1);
var bereich = Angebotscombobox.SelectedItem as AdditionalServiceRegionDC;
ServiceFacade.DoOperationsServiceSync(o => o.RemoveAdditionalServiceCustomer(_Customer2Delete.Select(c => c.CustomerOid).ToList(), bereich?.AdditionalServiceRegionOid, start));
}
if (updateGrid)
UpdateTeilnahmeGrid();
SaveBtn.IsEnabled = false;
}
finally
{
Mouse.OverrideCursor = null;
}
}
public DownloadLinkEngine DownloadLinkEngine { get; set; }
public override bool IsDirty
{
get { return (ViewModel != null && ViewModel.AddedCount != 0) || IsGridDirty(); }
}
public override string Title
{
get { return "Ergänzende Dienste"; }
}
public bool WithoutClient
{
get { return ViewModel != null && ViewModel.WithoutClient; }
set
{
if (ViewModel != null)
ViewModel.WithoutClient = value;
}
}
internal override DependencyObject ValidationOnSaveRootElement
{
get { return SrListBox; }
}
private ServiceRecordListVM ViewModel
{
get { return _ViewModel; }
set
{
_SelectedEmployee = BeWoApp.LoggedOnUser.Employee;
PopupeditEmployee.Text = _SelectedEmployee.ToString();
DataContext = value;
_ViewModel = value;
_ViewModel.ServiceRecordListChanged += ViewModel_ServiceRecordListChanged;
if (!BeWoApp.LoggedOnUser.HasRight(UserRightType.ServiceRecordView_Create) && !BeWoApp.LoggedOnUser.HasRight(UserRightType.CreateAll))
{
NewObjectInfoGrid.IsEnabled = false;
ButtonAdd.IsEnabled = false;
}
}
}
public void AnimateOpacity(double pOpacitiy, double pDuration)
{
var lAnimation = new DoubleAnimation
{From = DetailContentGrid.Opacity, To = pOpacitiy, Duration = TimeSpan.FromMilliseconds(pDuration)};
DetailContentGrid.BeginAnimation(OpacityProperty, lAnimation);
}
public override void Delete()
{
Delete(GetSelectedServiceRecordFromListBox());
}
public void Delete(ServiceRecordVM vm)
{
if (vm == null) return;
var msg = vm.GroupOid != null ? "ACHTUNG, wenn Sie fortfahren, löschen Sie die gesamte Gruppenbuchung.\nWenn Sie nur einzelne " + Translator.Translate("Klienten") + " aus der Gruppe entfernen möchten,\neditieren Sie die Gruppe und entfernen den Klienten aus der Liste aller Hilfepläne.\nSind Sie sicher, dass Sie dem gesamten Gruppeneintrag löschen möchten?" : "Sind Sie sicher, dass Sie den gewählten Eintrag löschen möchten?";
if (MessageBox.Show(msg, "Eintrag löschen", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
{
if (vm.GroupOid != null)
{
List<ServiceRecordVM> deletedVMs = ViewModel.VMList.Where(item => item.GroupOid != null && item.GroupOid.Value == vm.GroupOid.Value).ToList();
foreach (var deletedVM in deletedVMs)
{
ViewModel.VMList.Remove(deletedVM);
}
}
else
{
ViewModel.VMList.Remove(vm);
}
var lDC = vm.CommitToDataContract();
ServiceFacade.DoOperationsServiceAsync(s => s.DeleteServiceRecord(lDC.ServiceRecordOid.Value, lDC.ServiceRecordVersion.Value), RefreshGrid);
}
}
public ServiceRecordVM GetSelectedServiceRecordFromListBox()
{
return (ServiceRecordVM)SrListBox.SelectedItem;
}
public void SetSelectedServiceRecordVM(ServiceRecordVM vm)
{
SrListBox.SelectedItem = vm;
}
internal override bool DoSaveCheck()
{
if (this.IsDirty)
{
MessageBoxResult lResult = this.ShowSaveQuestion();
if (lResult == MessageBoxResult.Cancel)
{
this.Focus();
return false;
}
if (lResult == MessageBoxResult.Yes)
{
this.SaveData();
SaveGridChanges(false);
}
}
return true;
}
//SRV2
protected override void Save()
{
var lToDos = new List<Action<IOperationsService>>();
if (ViewModel.AddedCount > 0)
{
lToDos.Add(
s =>
{
var newItems = ViewModel.CommitAdded();
try
{
List<long> oids = s.InsertNewServiceRecords(newItems);
int idx = 0;
foreach (ServiceRecordVM vm in ViewModel.VMList)
{
if (!vm.IsNew)
continue;
vm.IsNew = false;
vm.DataContract.ServiceRecordVersion = 1;
vm.DataContract.ServiceRecordOid = oids[idx++];
}
}
catch (Exception)
{
var newVMs = ViewModel.VMList.Where(vm => vm.IsNew).ToList();
foreach (var serviceRecordVm in newVMs)
ViewModel.VMList.Remove(serviceRecordVm);
this.Dispatch(() => ViewModel.RefreshServiceRecordsForSelectedTreeNode(false));
throw;
}
});
}
ServiceFacade.DoMultipleOperationsServicesSync(lToDos);
ReloadViewModel();
}
private void ReloadAdditionalServiceRelatedObjects()
{
AdditionalServices = ServiceFacade.DoOperationsServiceSync(f => f.GetAllAdditionalService());
AdditionalServiceRegions = ServiceFacade.DoOperationsServiceSync(adsr => adsr.GetAllAdditionalServiceRegion());
GroupBoxAdditionalService.DataContext = this;
}
private void ReloadAdditionalServiceBookings()
{
if (newShortAddAD != null)
newShortAddAD.Clear();
if (_BookingsToUpdate != null)
_BookingsToUpdate.Clear();
if (_NoticesToUpdate != null)
_NoticesToUpdate.Clear();
if (_Customer2Delete != null)
_Customer2Delete.Clear();
var start = new DateTime(SelectedYear, (int)SelectedMonth, 1);
var end = start.AddMonths(1);
AdditionalServiceBookings.VMList.Clear();
long? regionOid = null;
if (AdditionalServiceBookings.NewVM.AdditionalServiceRegion != null)
{
regionOid = AdditionalServiceBookings.NewVM.AdditionalServiceRegion.AdditionalServiceRegionOid;
}
foreach (var item in ServiceFacade.DoOperationsServiceSync(t => t.GetAllAdditionalServiceBookings(regionOid, start, end)))
{
AdditionalServiceBookings.VMList.Add(new AdditionalServiceBookingVM(item));
}
AdditionalServiceBookings.NewVM.AdditionalServiceRegion = (AdditionalServiceRegionDC)Angebotscombobox.SelectedItem;
AdditionalServiceNoticeList = ServiceFacade.DoOperationsServiceSync(t => t.GetAdditionalServiceNoticeList(regionOid, start, end));
}
private void ClosePopupView()
{
SetPopupViewVisible(false);
PopupContent.Child = null;
}
private void Edit(ServiceRecordVM vm)
{
if (vm != null && vm.EditAllowed)
{
BeWoView serviceRecordEditView;
double height = 450;
const double width = 800;
if (vm.GroupOid != null)
{
serviceRecordEditView = new ServiceRecordGroupEditView();
}
else
{
serviceRecordEditView = new ServiceRecordEditView();
}
PopupContent.Child = serviceRecordEditView;
PopupContent.Width = width;
if (rootGrid.ActualHeight < height)
height = rootGrid.ActualHeight;
PopupContent.Height = height;
if (serviceRecordEditView.CommandBindings.Count == 0)
{
serviceRecordEditView.CommandBindings.Add(
new CommandBinding(
ApplicationCommands.Close,
(s, e) =>
{
if (!serviceRecordEditView.DoSaveCheck())
return;
ClosePopupView();
ViewModel.RefreshServiceRecordsForSelectedTreeNode(false);
SetSelectedServiceRecordVM(vm);
}));
serviceRecordEditView.CommandBindings.Add(
new CommandBinding(
ApplicationCommands.Save,
(s, e) =>
{
bool save;
if (serviceRecordEditView is ServiceRecordEditView)
{
save = ((ServiceRecordEditView)serviceRecordEditView).IsValid() && ((ServiceRecordEditView)serviceRecordEditView).IsCustomerChangeAllowed();
}
else
save = ((ServiceRecordGroupEditView)serviceRecordEditView).IsValid() && ((ServiceRecordGroupEditView)serviceRecordEditView).IsCustomerChangeAllowed();
if (save)
{
serviceRecordEditView.SaveData();
ClosePopupView();
if (serviceRecordEditView is ServiceRecordEditView)
{
vm.Employee = _SelectedEmployee;
ViewModel.RefreshServiceRecordsForSelectedTreeNode(false);
SetSelectedServiceRecordVM(vm);
}
}
}));
}
if (serviceRecordEditView is ServiceRecordEditView)
{
((ServiceRecordEditView) serviceRecordEditView).InitView(ViewModel, vm, WithoutClient);
serviceRecordEditView.ParentView = this;
SetPopupViewVisible(true);
}
else
{
ServiceFacade.DoOperationsServiceAsync(
s => s.GetServiceRecordGroup(vm.GroupOid.Value),
r => this.Dispatch(
delegate
{
((ServiceRecordGroupEditView) serviceRecordEditView).InitView(ViewModel, vm, r);
serviceRecordEditView.ParentView = this;
SetPopupViewVisible(true);
}));
}
}
}
private void EmployeeSearchView_CustomerSelected(object sender, EventArgs<CompactEmployeeDC> e)
{
_SelectedEmployee = e.Data;
PopupeditEmployee.Text = _SelectedEmployee.ToString();
PopupEmployee.IsOpen = false;
ViewModel.SelectedEmployee = _SelectedEmployee;
if (WithoutClient)
{
SelectedItemChanged(null);
}
}
private static TChildItem FindVisualChild<TChildItem>(DependencyObject obj) where TChildItem : DependencyObject
{
for (var i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
var child = VisualTreeHelper.GetChild(obj, i);
if (child != null && child is TChildItem)
{
return (TChildItem) child;
}
var childOfChild = FindVisualChild<TChildItem>(child);
if (childOfChild != null)
{
return childOfChild;
}
}
return null;
}
private void InitDayCheckBoxes()
{
foreach (var iDay in Utils.GetDayOfWeeks(DayOfWeek.Monday))
{
var lCb = new CheckBox
{
Content = DateTimeFormatInfo.CurrentInfo.GetAbbreviatedDayName(iDay),
Margin = new Thickness(3),
IsHitTestVisible = DateTime.Now.DayOfWeek != iDay,
};
_DayBoxes[iDay] = lCb;
WrapPanelDays.Visibility = Visibility.Collapsed;
WrapPanelDays.Children.Add(lCb);
lCb.Checked += (s, e) => ViewModel.RecordingDays.Add(_DayBoxes.Single(entry => entry.Value == s).Key);
lCb.Unchecked += (s, e) => ViewModel.RecordingDays.Remove(_DayBoxes.Single(entry => entry.Value == s).Key);
lCb.IsChecked = DateTime.Now.DayOfWeek == iDay;
}
DependencyPropertyDescriptor.FromProperty(BaseEdit.EditValueProperty, typeof (DateEdit)).AddValueChanged(
DatepickerNewDate,
(s, e) => _DayBoxes.DoForEach(
iCheck =>
{
iCheck.Value.IsChecked = DatepickerNewDate.EditValue != null &&
iCheck.Key == DatepickerNewDate.DateTime.DayOfWeek;
iCheck.Value.IsHitTestVisible = !iCheck.Value.IsChecked.Value;
iCheck.Value.IsEnabled = iCheck.Value.IsHitTestVisible;
}));
}
private void GridViewBase_OnCellValueChanging(object sender, CellValueChangedEventArgs e)
{
// Das Datum ist der eindeutige Identifikator
var ausgewaehlterTeilnehmer = (Teilnehmer)e.Row;
if (e.Column.FieldName.Contains("Notice"))
{
if (e.Value == null)
{
ausgewaehlterTeilnehmer.Notice.Notice = "";
}
else
{
ausgewaehlterTeilnehmer.Notice.Notice = e.Value.ToString();
}
_NoticesToUpdate.Add(ausgewaehlterTeilnehmer.Notice);
}
else
{
var tableView = (TableView)sender;
var spalten = (List<Teilnehmer>)tableView.Grid.ItemsSource;
var alleTeilnehmer = spalten.Select(s => s.Customer);
var ausgewaehlterTag = Convert.ToInt32(e.Column.Header.ToString().Split('.')[0]);
var ausgewaehltesDatum = new DateTime(SelectedYear, (int)_SelectedMonth, ausgewaehlterTag);
var existiert = ausgewaehlterTeilnehmer.BookingRelation.Any(br => br.Value.Datum.Equals(ausgewaehltesDatum));
if (existiert) return;
if (_SelectedBookings.Any(vm => vm.Date.Equals(ausgewaehltesDatum)))
{
var btu = _SelectedBookings.First(vm => vm.Date.Equals(ausgewaehltesDatum));
if (btu.CustomerOidDict.ContainsKey(ausgewaehlterTeilnehmer.Customer.CustomerOid))
btu.CustomerOidDict.Remove(ausgewaehlterTeilnehmer.Customer.CustomerOid);
btu.CustomerOidDict.Add(ausgewaehlterTeilnehmer.Customer.CustomerOid, Convert.ToBoolean(e.Value));
_BookingsToUpdate.Add(btu.CommitToDataContract());
SaveBtn.IsEnabled = true;
return;
}
if (newShortAddAD.Any(ad => ad.Date.Equals(ausgewaehltesDatum)))
{
newShortAddAD.First(ad => ad.Date.Equals(ausgewaehltesDatum)).CustomerOidDict[ausgewaehlterTeilnehmer.Customer.CustomerOid] = Convert.ToBoolean(e.Value);
return;
}
var mitarbeiter = MultiEmployeeControlAddServ.SelectedEmployees.Select(emp => emp.EmployeeOid).ToList();
var temp = alleTeilnehmer.ToList();
//Dictionary<long, bool> klienten = new Dictionary<long, bool>();
//foreach (var customer in alleTeilnehmer)
//{
// if (!klienten.ContainsKey(customer.CustomerOid))
// {
// klienten.Add(customer.CustomerOid, customer.Equals(ausgewaehlterTeilnehmer.Customer) && Convert.ToBoolean(e.Value));
// }
// else
// {
// //Fehler
// //int test = 0;
// }
//}
var klienten = new Dictionary<long, bool>();
foreach (var teilnehmer in alleTeilnehmer)
{
if (teilnehmer.CustomerOid == 0)
{
int test = 0;
}
if (!klienten.ContainsKey(teilnehmer.CustomerOid))
{
klienten.Add(teilnehmer.CustomerOid, teilnehmer.Equals(ausgewaehlterTeilnehmer.Customer) && Convert.ToBoolean(e.Value));
}
}
//var klienten = alleTeilnehmer.ToDictionary(teilnehmer => teilnehmer.CustomerOid, teilnehmer => (teilnehmer.Equals(ausgewaehlterTeilnehmer.Customer) && Convert.ToBoolean(e.Value)));
var bereich = (AdditionalServiceRegionDC)Angebotscombobox.SelectedItem;
var neueBuchung = new AdditionalServiceBookingDC
{
AdditionalServiceRegion = bereich,
CustomerOidDict = klienten,
EmployeeOidList = mitarbeiter,
Date = ausgewaehltesDatum,
StartDate = ausgewaehltesDatum,
EndDate = ausgewaehltesDatum.AddHours(23).AddMinutes(59).AddSeconds(59)
};
if (neueBuchung.EndDate.HasValue && neueBuchung.StartDate.HasValue)
{
var roundedDuration = Convert.ToDecimal((neueBuchung.EndDate.Value - neueBuchung.StartDate.Value).GetTotalMinutes());
neueBuchung.RoundedDuration = roundedDuration;
}
newShortAddAD.Add(neueBuchung);
}
SaveBtn.IsEnabled = true;
}
private readonly List<AdditionalServiceBookingDC> newShortAddAD = new List<AdditionalServiceBookingDC>();
private static bool IsPartOf(object p, Type type)
{
if (p != null)
{
var fe = p as FrameworkElement;
if (fe != null)
return fe.GetType() == type || IsPartOf(fe.TemplatedParent, type);
}
return false;
}
private void RefreshGrid()
{
Dispatcher.BeginInvoke(
DispatcherPriority.Normal,
(Action)delegate
{
var selected = GetSelectedServiceRecordFromListBox();
ViewModel.RefreshServiceRecordsForSelectedTreeNode(false);
SetSelectedServiceRecordVM(selected);
});
}
private void ReloadViewModel()
{
ViewModel.PrototypeVM.Notice = string.Empty;
if (ViewModel.PrototypeVM.GoalTree != null && ViewModel.PrototypeVM.GoalTree.Count > 0)
foreach (var child in from item in ViewModel.PrototypeVM.GoalTree from child in item.Children where child.IsChecked select child)
child.IsChecked = false;
}
private void SelectedItemChanged(FlatSupportConceptTreeNodeDC selectedNode)
{
if (ViewModel != null)
{
UpdateAssessmentSheet(selectedNode);
ViewModel.ChangeTreeItemSelection(selectedNode);
SrListBox.SelectedIndex = -1;
var sv = FindVisualChild<ScrollViewer>(SrListBox);
if (sv != null)
sv.ScrollToTop();
UpdateServiceRecordListReportUrl(selectedNode);
}
}
private void SetPopupViewVisible(bool visible)
{
PopupContent.Visibility = visible ? Visibility.Visible : Visibility.Hidden;
if (visible)
AnimateOpacity(0.5, 200);
else
AnimateOpacity(1, 100);
}
private void TextBox_GotFocus(object sender, RoutedEventArgs e)
{
var vm = ((TextBox)sender).Tag as ServiceRecordVM;
if (vm != null)
SrListBox.SelectedItem = vm;
}
private void UpdateServiceRecordListReportUrl(FlatSupportConceptTreeNodeDC selectedNode)
{
long scOid = 0;
long cOid = 0;
long cb2scOid = 0;
var eOid = BeWoApp.LoggedOnUser.Employee.EmployeeOid;
if (selectedNode != null && selectedNode.SupportConceptTreeNodeDC != null)
{
if (selectedNode.SupportConceptTreeNodeDC.SupportConcept != null)
{
scOid = selectedNode.SupportConceptTreeNodeDC.SupportConcept.SupportConceptOid;
}
if (selectedNode.SupportConceptTreeNodeDC.Customer != null)
{
cOid = selectedNode.SupportConceptTreeNodeDC.Customer.CustomerOid;
}
if (selectedNode.SupportConceptTreeNodeDC.SupportConceptCostBearerRelDC != null)
{
cb2scOid = selectedNode.SupportConceptTreeNodeDC.SupportConceptCostBearerRelDC.CostBearer2SupportConceptOid.Value;
}
}
var url = BeWoApp.SiteOfOrigin + "/ReportView.aspx" + "?eOid=" + eOid + "&scOid=" + scOid + "&cOid=" + cOid + "&cb2scOid=" + cb2scOid + "&type=" + Utils.EnumName(ReportTypes.ServiceRecordList);
url = BeWoWpfUtils.GetHTMLEncodedURL(url);
LinkPdfExport.NavigateUri = new Uri(url);
}
private bool ValidateAdditionalServiceBookings()
{
const bool lValid = true;
if (AdditionalServiceBookings.NewVM.CustomerOidDict.Count == 0)
{
MessageBox.Show("Bitte wählen Sie mindestens " + Translator.Translate("einen Klienten") + "aus, für " + Translator.Translate("den") + " dieses Angebot gebucht werden soll.",
"Buchen nicht möglich",
MessageBoxButton.OK,
MessageBoxImage.Information);
return false;
}
if (AdditionalServiceBookings.NewVM.EmployeeOidList.Count == 0)
{
MessageBox.Show(Translator.Translate("Bitte wählen Sie mindestens einen Mitarbeiter aus, für den dieses Angebot gebucht werden soll."),
"Buchen nicht möglich",
MessageBoxButton.OK,
MessageBoxImage.Information);
return false;
}
var customerOids = new List<long>();
AdditionalServiceBookings.NewVM.CustomerOidDict.Keys.DoForEach(c => customerOids.Add(c));
if (ServiceFacade.DoOperationsServiceSync(b =>
b.OverlapsWithAnotherAdditionalServiceBooking(
AdditionalServiceBookings.NewVM.AdditionalServiceRegion.AdditionalServiceRegionOid.Value, customerOids,
AdditionalServiceBookings.NewVM.Date)))
{
if (MessageBox.Show(
"An dem ausgewählten Tag existiert bereits eine Buchung. Möchten Sie trotzdem buchen?",
"Buchen", MessageBoxButton.YesNo, MessageBoxImage.Information).Equals(MessageBoxResult.No))
{
return false;
}
}
return lValid;
}
private void ViewModel_ServiceRecordListChanged(object sender, EventArgs e)
{
var list = _ViewModel.ServiceRecordsForSelectedCustomer.OrderByDescending(srVM => srVM.StartDate).ToList();
SrListBox.ItemsSource = list;
if (_AssessmentSheet != null)
{
_AssessmentSheet.ServiceRecords = list;
}
}
private void btnDelete_Click(object sender, RoutedEventArgs e)
{
var vm = ((Button)sender).Tag as ServiceRecordVM;
if (vm != null)
SrListBox.SelectedItem = vm;
Delete();
}
private void btnEdit_Click(object sender, RoutedEventArgs e)
{
var vm = ((Button)sender).Tag as ServiceRecordVM;
if (vm != null)
SrListBox.SelectedItem = vm;
Edit(GetSelectedServiceRecordFromListBox());
}
private void button_ADadd_Click(object sender, RoutedEventArgs e)
{
if (!CheckEditRight(true))
{
return;
}
if (AdditionalServiceBookings.NewVM == null ||
AdditionalServiceBookings.NewVM.CustomerOidDict == null)
return;
var mitarbeiter = MultiEmployeeControlAddServ.SelectedEmployees;
var klienten = MultiAddServGroupOfPeopleSelectionControl.CurrentGroup.CustomerList;
//ReloadAdditionalServiceRelatedObjects();
if (!ValidateAdditionalServiceBookings())
return;
var lToDos = new List<Action<IOperationsService>>();
AdditionalServiceBookings.AddNewVMToList();
if (AdditionalServiceBookings.AddedCount > 0)
{
lToDos.Add(
s =>
{
var newItems = AdditionalServiceBookings.CommitAdded();
try
{
var oids = s.InsertNewAdditionalServiceBookings(newItems);
var idx = 0;
foreach (var vm in AdditionalServiceBookings.VMList.Where(vm => vm.IsNew))
{
vm.IsNew = false;
vm.DataContract.AdditionalServiceBookingVersion = 1;
vm.DataContract.AdditionalServiceBookingOid = oids[idx++];
}
}
catch (Exception)
{
var newVMs = AdditionalServiceBookings.VMList.Where(vm => vm.IsNew).ToList();
foreach (var additionalServiceBookingVM in newVMs)
AdditionalServiceBookings.VMList.Remove(additionalServiceBookingVM);
throw;
}
});
}
ServiceFacade.DoMultipleOperationsServicesAsync(lToDos, () =>
{
//AdditionalServiceBookings.VMList.Clear();
//foreach (var item in ServiceFacade.DoOperationsServiceSync(t => t.GetAllAdditionalServiceBookings()))
// AdditionalServiceBookings.VMList.Add(new AdditionalServiceBookingVM(item));
AdditionalServiceBookings.NewVM.EmployeeOidList =
MultiEmployeeControlAddServ.SelectedEmployees.Select(emp => emp.EmployeeOid).ToList();
this.Dispatch(
delegate
{
AdditionalServiceBookings.NewVM.CustomerOidDict = MultiAddServGroupOfPeopleSelectionControl.CurrentGroup.CustomerList.ToDictionary(customer => customer.CustomerOid, customer => true);
UpdateAngebotsCombobox();
UpdateTeilnahmeGrid();
});
});
}
private void BereichsComboboxChange(object sender, RoutedEventArgs e)
{
Bereichscombobox.DataContext = this;
if (Bereichscombobox.SelectedItem == null)
Bereichscombobox.SelectedItem = AdditionalServices.ElementAt(0);
UpdateAngebotsCombobox();
}
private void UpdateAngebotsCombobox()
{
var ASRDCs = AdditionalServiceRegions.Where( id => id.AdditionalServiceOid == ((AdditionalServiceDC) Bereichscombobox.SelectedItem).AdditionalServiceOid).ToList();
var gleich = false;
var liste = Angebotscombobox.ItemsSource as List<AdditionalServiceRegionDC>;
if(Angebotscombobox.ItemsSource != null && (liste.Count == ASRDCs.Count))
for (int i = 0; i < ASRDCs.Count; i++)
gleich = liste[i].Equals(ASRDCs[i]);
if (Angebotscombobox.ItemsSource == null || !gleich)
Angebotscombobox.ItemsSource = ASRDCs;
if (ASRDCs.Any() && Angebotscombobox.SelectedItem == null)
Angebotscombobox.SelectedItem = AdditionalServiceRegions.Where(id => id.AdditionalServiceOid == ((AdditionalServiceDC) Bereichscombobox.SelectedItem).AdditionalServiceOid).ElementAt(0);
if (Angebotscombobox.SelectedItem != null)
AdditionalServiceBookings.NewVM.AdditionalServiceRegion = (AdditionalServiceRegionDC)Angebotscombobox.SelectedItem;
}
private void AngebotsComboboxChange(object sender, RoutedEventArgs e)
{
//SelectionChangedEventArgs args = e as SelectionChangedEventArgs;
//var added = args.AddedItems;
//var removed = args.RemovedItems;
ShouldGridBeSaved();
if (Angebotscombobox.SelectedItem == null)
return;
AdditionalServiceBookings.NewVM.AdditionalServiceRegion = (AdditionalServiceRegionDC)Angebotscombobox.SelectedItem;
UpdateTeilnahmeGrid();
}
private bool ShouldGridBeSaved()
{
if (IsGridDirty())
{
//var ret = MessageBox.Show("Wollen Sie die Änderungen speichern?", "Änderungen speichern",
// MessageBoxButton.YesNo, MessageBoxImage.Question);
//if (ret == MessageBoxResult.No)
// return false;
SaveGridChanges(false);
return true;
}
return false;
}
private bool IsGridDirty()
{
return _BookingsToUpdate.Count > 0 || newShortAddAD.Any() || _NoticesToUpdate.Count > 0 || _Customer2Delete.Count > 0;
}
private void button_add_Click(object sender, RoutedEventArgs e)
{
var lValid = ValidationTrigger.Validate(root);
if (lValid)
{
lValid = SaveSingleBooking();
ComboBoxTreeViewControl.ResetControl();
ComboBoxTreeViewControl.TreeViewSourceList = ViewModel.PrototypeVM.GoalTree;
}
//var lValid = ValidationTrigger.Validate(root);
//var records = new List<ServiceRecordDC>();
//foreach (ServiceRecordVM iVM in ViewModel.CreateFromPrototype())
//{
// if (iVM.Customer == null)
// break;
// iVM.Employee = _SelectedEmployee;
// records.Add(iVM.CommitToDataContract());
//}
//if (lValid)
// SaveSingleBooking();
//else
// foreach (var iVM in ViewModel.CreateFromPrototype())
// MessageBox.Show("Der gewählte Zeitpunkt '" + iVM.DateAndTime.Value.ToShortDateString() + " " + iVM.DateAndTime.Value.ToShortTimeString() + "' überschneidet sich mit einem bereits existierenden Eintrag desselben Hilfeplans.\nSpeichern nicht möglich.", "Speichern nicht möglich", MessageBoxButton.OK, MessageBoxImage.Information);
}
private bool SaveSingleBooking()
{
var lValid = true;
FlatSupportConceptTreeNodeDC selectedNode = null;
if (ViewModel.CustomerNodes.Count > 0)
{
selectedNode = ViewModel.CustomerNodes[0];
}
if (!WithoutClient && selectedNode?.SupportConceptTreeNodeDC == null)
{
MessageBox.Show("Bitte wählen Sie zuerst einen Hilfeplan, für den Sie Leistungen dokumentieren möchten.", "Speichern", MessageBoxButton.OK, MessageBoxImage.Information);
lValid = false;
}
if (lValid)
{
lValid = BeWoUtils.ValidateServiceRecordVM(ViewModel.PrototypeVM, ViewModel.StatisticsDC, selectedNode, false, ViewModel.SelectedEmployee, null, null);
if (lValid)
{
var save = false;
foreach (var iVM in ViewModel.CreateFromPrototype())
{
iVM.Employee = _SelectedEmployee;
ViewModel.VMList.Add(iVM);
save = true;
}
if (save)
{
Save();
ViewModel.RefreshServiceRecordsForSelectedTreeNode(false);
}
}
}
return lValid;
}
private void linkExcelExport_RequestNavigate(object sender, RequestNavigateEventArgs e)
{
var list = SrListBox.ItemsSource as List<ServiceRecordVM>;
var lHeaderCaptions = new List<string>();
var lContent = new List<List<string>>();
lHeaderCaptions.Add("Datum");
lHeaderCaptions.Add(Translator.Translate("FLM"));
lHeaderCaptions.Add(Translator.Translate("FLM gerundet"));
lHeaderCaptions.Add(Translator.Translate("MitarbeiterSingular"));
lHeaderCaptions.Add(Translator.Translate("Klient"));
lHeaderCaptions.Add(Translator.Translate("Hilfeplan"));
lHeaderCaptions.Add(Translator.Translate("Kostenträger"));
lHeaderCaptions.Add("Kategorie");
lHeaderCaptions.Add("Leistung");
lHeaderCaptions.Add("Dokumentation");
if (list != null)
{
lContent.AddRange(list.Select(vm => new List<string> {String.Format("{0:d}", vm.StartDate), vm.AssistanceDuration.ToString(), vm.RoundedDuration.ToString(), vm.Employee != null ? vm.Employee.ToString() : string.Empty, vm.Customer != null ? vm.Customer.ToString() : string.Empty, vm.SupportConcept != null ? vm.SupportConcept.ToString() : string.Empty, vm.CostBearer != null ? vm.CostBearer.ToString() : string.Empty, vm.Category != null ? vm.Category.ToString() : string.Empty, vm.ServiceDescription != null ? vm.ServiceDescription.ToString() : string.Empty, vm.Notice}));
}
var path = BeWoApp.GetAndCreateUserAppDataPath() + "\\Dokumentation.xls";
var sf = new SaveFileDialog { FileName = Path.GetFileName(path), Filter = "Microsoft Excel 97-2003-Arbeitsblatt|*.xls|Alle Dateien|*.*" };
if (sf.ShowDialog() != true)
return;
ServiceFacade.DoDownloadServiceSync(s => BeWoUtils.WriteExcelFile(s.PrepareExcelFile(DownloadLinkEngine.ExcelFileId, lHeaderCaptions, lContent), sf.FileName));
}
private void popupedit_employee_PopUpClick(object sender, RoutedEventArgs e)
{
PopupEmployee.IsOpen = true;
}
private void serviceRecordListBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
if (!IsPartOf(e.OriginalSource, typeof(ScrollBar)))
Edit(GetSelectedServiceRecordFromListBox());
}
private void UpdateAssessmentSheet(FlatSupportConceptTreeNodeDC selectedNode)
{
if (_AssessmentSheet == null)
return;
HideAssessmentSheet();
}
private DockLayoutManager dockLayoutManager;
private Grid panel1;
private Grid panel2;
private Grid panel3;
private void HideAssessmentSheet()
{
_AssessmentSheet.SetCustomer(null, null);
_AssessmentSheet.Visibility = Visibility.Collapsed;
if (dockLayoutManager != null)
dockLayoutManager.Visibility = Visibility.Collapsed;
if (FLSGrid.Children.Count != 0)
return;
if (panel1 != null)
{
panel1.Children.Clear();
panel2.Children.Clear();
panel3.Children.Clear();
}
GroupBoxNeueLeistung.Content = GridNeueLeistung;
FLSGrid.Children.Add(GroupBoxNeueLeistung);
FLSGrid.Children.Add(ServiceRecordListContent);
FLSGrid.Children.Add(TxtServiceListCount);
FLSGrid.Children.Add(StackPanelInfoText);
FLSGrid.Children.Add(PunktebogenRootGrid);
}
public override void ModalPopUpCloseInvoked()
{
MainControl.CloseCurrentPopUp();
}
public override void ModalPopUpSaveInvoked()
{
}
void multiAddServGroupOfPeopleSelectionControl_EditGroupButtonClicked(object sender, EventArgs e)
{
OpenAddServGroupEditView();
}
private void OpenAddServGroupEditView()
{
VMFactory.CreateAdditinoalServiceGroupOfPeopleListVMAsync(
cb => this.Dispatch(delegate
{
_AdditionalServiceGroupOfPeoplePopUp = new AdditionalServiceGroupOfPeopleView(cb)
{
MinWidth = 700,
MaxWidth = 700,
Height = 600
};
_AdditionalServiceGroupOfPeoplePopUp.GroupOfPeopleSavedOrUpdated += AdditionalServiceGroupOfPeoplePopUp_AdditionalServiceGroupOfPeopleSavedOrUpdated;
BeWoApp.MainControl.ShowControlAsModalPopup(_AdditionalServiceGroupOfPeoplePopUp);
_AdditionalServiceGroupOfPeoplePopUp.Focus();
})
);
}
private void LinkPdfExport_OnRequestNavigate(object sender, RequestNavigateEventArgs e)
{
BeWoUtils.NavigateToReportUri(((Hyperlink)sender).NavigateUri.ToString(), "Druckvorschau");
}
private static void AdditionalServiceGroupOfPeoplePopUp_AdditionalServiceGroupOfPeopleSavedOrUpdated(object sender, EventArgs<AdditionalServiceGroupOfPeopleListVM> e)
{
BeWoApp.MainControl.CloseCurrentPopUp();
}
private void MultiAddServGroupOfPeopleSelectionControl_OnPropertyChanged(object sender, PropertyChangedEventArgs e)
{
var groupSearchControl = (MultiAddServGroupOfPeopleSelectionControl) sender;
AdditionalServiceBookings.NewVM.CustomerOidDict = groupSearchControl.CurrentGroup.CustomerList.ToDictionary(customer => customer.CustomerOid, customer => true);
this.Dispatch(() => Cache.GetInstance().GetAllActiveSupportConceptsCompact(x => this.Dispatch(() => { SupportConceptSelectionControl.SupportConceptList = x; })));
}
private void UpdateAdditionalServiceReportUrl()
{
var url = BeWoApp.SiteOfOrigin + "/ReportView.aspx" + "?y=" + SelectedYear + "&m=" + SelectedMonth + "&asroid=" + (Angebotscombobox.SelectedItem as AdditionalServiceRegionDC).AdditionalServiceRegionOid + "&type=" + Utils.EnumName(ReportTypes.AdditionalServiceBookingReport);
url = BeWoWpfUtils.GetHTMLEncodedURL(url);
LinkPdfExport2.NavigateUri = new Uri(url);
}
private void FLSAnlegenBtn_OnClick(object sender, RoutedEventArgs e)
{
if (TeilnahmeGrid.Visibility == Visibility.Visible)
{
TeilnahmeGrid.Visibility = Visibility.Collapsed;
MonatsLabel.Visibility = Visibility.Collapsed;
MonatsCombobox.Visibility = Visibility.Collapsed;
JahresLabel.Visibility = Visibility.Collapsed;
JahresCombobox.Visibility = Visibility.Collapsed;
SaveBtn.Visibility = Visibility.Collapsed;
TextblockLinkPdfexport2.Visibility = Visibility.Collapsed;
FLSInfoGrid.Visibility = Visibility.Visible;
button_ADadd.Visibility = Visibility.Hidden;
}
else
{
TeilnahmeGrid.Visibility = Visibility.Visible;
MonatsLabel.Visibility = Visibility.Visible;
MonatsCombobox.Visibility = Visibility.Visible;
JahresLabel.Visibility = Visibility.Visible;
JahresCombobox.Visibility = Visibility.Visible;
SaveBtn.Visibility = Visibility.Visible;
TextblockLinkPdfexport2.Visibility = Visibility.Visible;
button_ADadd.Visibility = Visibility.Visible;
FLSInfoGrid.Visibility = Visibility.Collapsed;
if (AdditionalServiceBookings.NewVM.EmployeeOidList.Count > 0)
{
//_SelectedEmployee = AdditionalServiceBookings.NewVM.EmployeeOidList.First();
// PopupeditEmployee.Text = _SelectedEmployee.ToString();
//_SelectedEmployee = null;
//PopupeditEmployee.Text = AdditionalServiceBookings.NewVM.EmployeeOidList.First().ToString();
}
}
FLSGrid.Visibility = FLSGrid.Visibility == Visibility.Collapsed ? Visibility.Visible : Visibility.Collapsed;
}
private void supportConceptSelectionControl_ItemSelected(object sender, EventArgs<FlatSupportConceptTreeNodeDC> e)
{
ViewModel.ChangeTreeItemSelection(e.Data);
ViewModel.RefreshServiceRecordsForSelectedTreeNode(true);
UpdateServiceRecordListReportUrl(e.Data);
ComboBoxTreeViewControl.ResetControl();
foreach (var item in ViewModel.PrototypeVM.GoalTree)
item.IsChecked = false;
ComboBoxTreeViewControl.TreeViewSourceList = ViewModel.PrototypeVM.GoalTree;
}
private void LinkPdfExport2_OnRequestNavigate(object sender, RequestNavigateEventArgs e)
{
BeWoUtils.NavigateToReportUri(((Hyperlink)sender).NavigateUri.ToString(), "Druckvorschau");
}
private void TableView_ShowingEditor(object sender, ShowingEditorEventArgs e)
{
if (!CheckEditRight(true))
{
e.Cancel = true;
e.Handled = true;
}
}
private void TableView_ShowGridMenu(object sender, GridMenuEventArgs e)
{
AddContextMenu(e);
}
private void AddContextMenu(GridMenuEventArgs e)
{
var item = e.Source.DataControl.SelectedItem as Teilnehmer;
if (item != null)
{
e.Customizations.Add(new DevExpress.Xpf.Bars.BarItemSeparator());
var btn = new BarButtonItem { Content = "Zeile löschen", Tag = item };
btn.ItemClick += DeleteRow_OnClick;
e.Customizations.Add(btn);
}
//if (tvm != null)
//{
// if (tvm.Absencetime != null)
// {
// e.Customizations.Add(new DevExpress.Xpf.Bars.BarItemSeparator());
// var btn = new BarButtonItem { Content = "Abwesenheit löschen", Tag = tvm };
// btn.ItemClick += DeleteRow_OnClick;
// e.Customizations.Add(btn);
// }
//}
}
private void DeleteRow_OnClick(object sender, RoutedEventArgs e)
{
var barButtonItem = (BarButtonItem)sender;
var item = barButtonItem.Tag as Teilnehmer;
if (item != null && MessageBox.Show(String.Format("Möchten Sie '{0}' wirklich aus der Liste entfernen?", item.Customer), "Löschen", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
{
_Customer2Delete.Add(item.Customer);
var teilnehmer = (List<Teilnehmer>)TeilnahmeGrid.ItemsSource;
teilnehmer.Remove(item);
TeilnahmeGrid.RefreshData();
SaveBtn.IsEnabled = true;
}
}
}
public class Teilnehmer
{
public CompactCustomerDC Customer { get; set; }
#region Anwesenheiten
private bool _t0; public bool t0 { get { return _t0; } set { _t0 = value; TeilnahmenForUpdating[0] = value; } }
private bool _t1; public bool t1 { get { return _t1; } set { _t1 = value; TeilnahmenForUpdating[1] = value; } }
private bool _t2; public bool t2 { get { return _t2; } set { _t2 = value; TeilnahmenForUpdating[2] = value; } }
private bool _t3; public bool t3 { get { return _t3; } set { _t3 = value; TeilnahmenForUpdating[3] = value; } }
private bool _t4; public bool t4 { get { return _t4; } set { _t4 = value; TeilnahmenForUpdating[4] = value; } }
private bool _t5; public bool t5 { get { return _t5; } set { _t5 = value; TeilnahmenForUpdating[5] = value; } }
private bool _t6; public bool t6 { get { return _t6; } set { _t6 = value; TeilnahmenForUpdating[6] = value; } }
private bool _t7; public bool t7 { get { return _t7; } set { _t7 = value; TeilnahmenForUpdating[7] = value; } }
private bool _t8; public bool t8 { get { return _t8; } set { _t8 = value; TeilnahmenForUpdating[8] = value; } }
private bool _t9; public bool t9 { get { return _t9; } set { _t9 = value; TeilnahmenForUpdating[9] = value; } }
private bool _t10; public bool t10 { get { return _t10; } set { _t10 = value; TeilnahmenForUpdating[10] = value; } }
private bool _t11; public bool t11 { get { return _t11; } set { _t11 = value; TeilnahmenForUpdating[11] = value; } }
private bool _t12; public bool t12 { get { return _t12; } set { _t12 = value; TeilnahmenForUpdating[12] = value; } }
private bool _t13; public bool t13 { get { return _t13; } set { _t13 = value; TeilnahmenForUpdating[13] = value; } }
private bool _t14; public bool t14 { get { return _t14; } set { _t14 = value; TeilnahmenForUpdating[14] = value; } }
private bool _t15; public bool t15 { get { return _t15; } set { _t15 = value; TeilnahmenForUpdating[15] = value; } }
private bool _t16; public bool t16 { get { return _t16; } set { _t16 = value; TeilnahmenForUpdating[16] = value; } }
private bool _t17; public bool t17 { get { return _t17; } set { _t17 = value; TeilnahmenForUpdating[17] = value; } }
private bool _t18; public bool t18 { get { return _t18; } set { _t18 = value; TeilnahmenForUpdating[18] = value; } }
private bool _t19; public bool t19 { get { return _t19; } set { _t19 = value; TeilnahmenForUpdating[19] = value; } }
private bool _t20; public bool t20 { get { return _t20; } set { _t20 = value; TeilnahmenForUpdating[20] = value; } }
private bool _t21; public bool t21 { get { return _t21; } set { _t21 = value; TeilnahmenForUpdating[21] = value; } }
private bool _t22; public bool t22 { get { return _t22; } set { _t22 = value; TeilnahmenForUpdating[22] = value; } }
private bool _t23; public bool t23 { get { return _t23; } set { _t23 = value; TeilnahmenForUpdating[23] = value; } }
private bool _t24; public bool t24 { get { return _t24; } set { _t24 = value; TeilnahmenForUpdating[24] = value; } }
private bool _t25; public bool t25 { get { return _t25; } set { _t25 = value; TeilnahmenForUpdating[25] = value; } }
private bool _t26; public bool t26 { get { return _t26; } set { _t26 = value; TeilnahmenForUpdating[26] = value; } }
private bool _t27; public bool t27 { get { return _t27; } set { _t27 = value; TeilnahmenForUpdating[27] = value; } }
private bool _t28; public bool t28 { get { return _t28; } set { _t28 = value; TeilnahmenForUpdating[28] = value; } }
private bool _t29; public bool t29 { get { return _t29; } set { _t29 = value; TeilnahmenForUpdating[29] = value; } }
private bool _t30; public bool t30 { get { return _t30; } set { _t30 = value; TeilnahmenForUpdating[30] = value; } }
#endregion
public Dictionary<long, BookingRelationDictionaryValue> BookingRelation { get; set; }
public bool[] TeilnahmenForUpdating { get; set; }
public bool ContainsOneRelationOnly { get; set; }
public AdditionalServiceNoticeDC Notice { get; set; }
public Teilnehmer(CompactCustomerDC customer, IList<bool> teilnahmen, Dictionary<long, BookingRelationDictionaryValue> bookingRelation, AdditionalServiceNoticeDC notice, bool containsOneRelationOnly = false)
{
Customer = customer;
Notice = notice;
ContainsOneRelationOnly = containsOneRelationOnly;
if (BookingRelation == null)
BookingRelation = new Dictionary<long, BookingRelationDictionaryValue>();
BookingRelation = BookingRelation.Union(bookingRelation).ToDictionary(k => k.Key, v => v.Value);
TeilnahmenForUpdating = teilnahmen.ToArray();
t0 = teilnahmen[0];
t1 = teilnahmen[1];
t2 = teilnahmen[2];
t3 = teilnahmen[3];
t4 = teilnahmen[4];
t5 = teilnahmen[5];
t6 = teilnahmen[6];
t7 = teilnahmen[7];
t8 = teilnahmen[8];
t9 = teilnahmen[9];
t10 = teilnahmen[10];
t11 = teilnahmen[11];
t12 = teilnahmen[12];
t13 = teilnahmen[13];
t14 = teilnahmen[14];
t15 = teilnahmen[15];
t16 = teilnahmen[16];
t17 = teilnahmen[17];
t18 = teilnahmen[18];
t19 = teilnahmen[19];
t20 = teilnahmen[20];
t21 = teilnahmen[21];
t22 = teilnahmen[22];
t23 = teilnahmen[23];
t24 = teilnahmen[24];
t25 = teilnahmen[25];
t26 = teilnahmen[26];
t27 = teilnahmen[27];
if (teilnahmen.Count >= 29)
t28 = teilnahmen[28];
if (teilnahmen.Count >= 30)
t29 = teilnahmen[29];
if (teilnahmen.Count == 31)
t30 = teilnahmen[30];
}
}
public struct BookingRelationDictionaryValue
{
public DateTime Datum, StartDate, EndDate;
public BookingRelationDictionaryValue(DateTime d, DateTime s, DateTime e)
{
Datum = d;
StartDate = s;
EndDate = e;
}
}
public class CheckEditTag
{
public Teilnehmer Teilnehmer { get; set; }
public GridColumn Column { get; set; }
public CheckEditTag(Teilnehmer teilnehmer, GridColumn column)
{
Teilnehmer = teilnehmer;
Column = column;
}
public int GetHeaderAsDay()
{
if (Column.Header.ToString().Equals(string.Empty))
{
return 0;
}
var tag = int.Parse(Column.Header.ToString().Split('.')[0], NumberStyles.Integer);
return tag;
}
}
}