Reupload
Reupload
This commit is contained in:
@@ -0,0 +1,358 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Interactivity;
|
||||
using Avalonia.Threading;
|
||||
using LeanderShiftPlannerV2.FileIO;
|
||||
using LeanderShiftPlannerV2.Model;
|
||||
using LeanderShiftPlannerV2.Service;
|
||||
using LeanderShiftPlannerV2.View.ErrorView;
|
||||
using LeanderShiftPlannerV2.View.LeanderControls;
|
||||
|
||||
namespace LeanderShiftPlannerV2.View.LeanderShiftPlannerView;
|
||||
|
||||
public partial class LeanderShiftPlannerMainWindow : Window
|
||||
{
|
||||
private readonly AppService _appService = ((App)Application.Current!).AppService;
|
||||
private CancellationTokenSource _cts = new CancellationTokenSource();
|
||||
private CancellationToken _cancelCalculation;
|
||||
private bool _calcRunning;
|
||||
private readonly Dispatcher _dispatcher = Dispatcher.UIThread;
|
||||
private readonly Dictionary<Filter, FilterElement> _filters = new Dictionary<Filter, FilterElement>();
|
||||
|
||||
public LeanderShiftPlannerMainWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
LoadData();
|
||||
|
||||
DeactivateView();
|
||||
ViewModePersons();
|
||||
|
||||
ListViewPersons.ItemsSource = _appService.PersonService.GetPersonList();
|
||||
ListViewShifts.ItemsSource = _appService.ShiftService.GetShiftList();
|
||||
|
||||
_appService.PersonService.GetPersonList().CollectionChanged += PersonListChanged;
|
||||
_appService.ShiftService.GetShiftList().CollectionChanged += ShiftListChanged;
|
||||
_appService.ShiftPlanService.GetShiftPlans().CollectionChanged += ShiftPlansChanged;
|
||||
_appService.FilterService.Filters.CollectionChanged += FilterListChanged;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------UI-Interactions------------------------------------------------------
|
||||
|
||||
private void ButtonAddPerson_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
ViewService.ShowPersonCreator(this, _appService);
|
||||
}
|
||||
|
||||
private void ButtonEditPerson_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
if (ListViewPersons.SelectedItem is Person selectedPerson)
|
||||
{
|
||||
ViewService.ShowPersonEditor(this, _appService, selectedPerson);
|
||||
}
|
||||
}
|
||||
|
||||
private void ButtonDeletePerson_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
AreYouSure confirm = ViewService.ShowAreYouSure(this);
|
||||
|
||||
confirm.Closed += (_, _) =>
|
||||
{
|
||||
if (!confirm.DialogResult) return;
|
||||
|
||||
if (ListViewPersons.SelectedItem is not Person selectedPerson) return;
|
||||
_appService.PersonService.DeletePerson(selectedPerson);
|
||||
PersonListChanged(sender, e);
|
||||
};
|
||||
}
|
||||
|
||||
private void ButtonAddShiftToPerson_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
if (ListViewPersons.SelectedItem is Person selectedPerson)
|
||||
{
|
||||
ViewService.ShowPersonShiftSelector(this, _appService, selectedPerson,
|
||||
_appService.ShiftService.GetShiftList());
|
||||
}
|
||||
}
|
||||
|
||||
private void ButtonAddShift_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
ViewService.ShowShiftCreator(this, _appService);
|
||||
}
|
||||
|
||||
private void ButtonEditShift_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
if (ListViewShifts.SelectedItem is Shift selectedShift)
|
||||
{
|
||||
ViewService.ShowShiftEditor(this, _appService, selectedShift);
|
||||
}
|
||||
}
|
||||
|
||||
private void ButtonDeleteShift_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
AreYouSure confirm = ViewService.ShowAreYouSure(this);
|
||||
|
||||
confirm.Closed += (_, _) =>
|
||||
{
|
||||
if (!confirm.DialogResult) return;
|
||||
|
||||
if (ListViewShifts.SelectedItem is not Shift selectedShift) return;
|
||||
_appService.ShiftService.RemoveShift(selectedShift);
|
||||
ShiftListChanged(sender, e);
|
||||
};
|
||||
}
|
||||
|
||||
private void ButtonAddPersonToShift_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
if (ListViewShifts.SelectedItem is Shift selectedShift)
|
||||
{
|
||||
ViewService.ShowShiftPersonSelector(this, _appService, selectedShift,
|
||||
_appService.PersonService.GetPersonList());
|
||||
}
|
||||
}
|
||||
|
||||
private void ButtonOpenShiftPlan_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
if (ListViewShiftPlans.SelectedItem is ShiftPlan selectedShiftPlan)
|
||||
{
|
||||
ViewService.ShowShiftPlanViewer(this, _appService, selectedShiftPlan);
|
||||
}
|
||||
}
|
||||
|
||||
private async void ButtonGenerateTimesheets_OnClick(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
await _appService.TimesheetService.GenerateTimeSheets();
|
||||
int error = TimesheetIO.ExportTimesheets(_appService.PersonService.GetPersonList().ToList());
|
||||
|
||||
if (error == 1) ;
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
throw; // TODO handle exception
|
||||
}
|
||||
}
|
||||
|
||||
private void ButtonFilterShiftPlans_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
ViewService.ShowFilterSelector(this, _appService);
|
||||
}
|
||||
|
||||
private void ButtonResetAllFilters_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
_appService.ShiftPlanService.ResetShiftPlanList();
|
||||
_appService.FilterService.ResetAllFilters();
|
||||
StackPanelFilterList.Children.Clear();
|
||||
_filters.Clear();
|
||||
}
|
||||
|
||||
private void ButtonSaveShiftPlans_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
foreach (ShiftPlan shiftPlan in _appService.ShiftPlanService.GetShiftPlans())
|
||||
ShiftPlanIO.ExportShiftPlan(ShiftPlanIO.GenerateShiftPlanPng(shiftPlan),
|
||||
_appService.ShiftPlanService.GetNextID());
|
||||
}
|
||||
|
||||
private void ButtonStartCalculation_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
if (_calcRunning)
|
||||
{
|
||||
_calcRunning = false;
|
||||
ViewModeCalcRunning();
|
||||
ButtonStartCalculation.Content = "Start calculation";
|
||||
ProgressbarCalculaion.IsIndeterminate = false;
|
||||
_cts.Cancel();
|
||||
}
|
||||
else
|
||||
{
|
||||
StackPanelFilterList.Children.Clear();
|
||||
_filters.Clear();
|
||||
|
||||
_appService.ShiftPlanService.RestartShiftPlanList();
|
||||
|
||||
_cts = new CancellationTokenSource();
|
||||
_calcRunning = true;
|
||||
ViewModeCalcRunning();
|
||||
_cancelCalculation = _cts.Token;
|
||||
ButtonStartCalculation.Content = "Stop calculation";
|
||||
ProgressbarCalculaion.IsIndeterminate = true;
|
||||
|
||||
Task calculation = new Task(() => { _appService.ShiftPlanService.StartCalculation(_cancelCalculation); });
|
||||
calculation.Start();
|
||||
|
||||
calculation.GetAwaiter().OnCompleted(() =>
|
||||
{
|
||||
_calcRunning = false;
|
||||
ViewModeCalcRunning();
|
||||
ProgressbarCalculaion.IsIndeterminate = false;
|
||||
ButtonStartCalculation.Content = "Start calculation";
|
||||
_cts.Dispose();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void Window_Closing(object? sender, WindowClosingEventArgs e)
|
||||
{
|
||||
SaveDataToFile.SavePersons(_appService.PersonService.GetPersonList().ToList());
|
||||
SaveDataToFile.SaveShifts(_appService.ShiftService.GetShiftList().ToList());
|
||||
SaveDataToFile.SavePersonShiftConnections(_appService.PersonService.GetPersonList().ToList());
|
||||
}
|
||||
|
||||
private void TabControlRoot_SelectionChanged(object? sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
if (e.AddedItems.Count == 0) return;
|
||||
|
||||
if (TabItemPersons == e.AddedItems[0] && !_calcRunning)
|
||||
{
|
||||
ViewModePersons();
|
||||
}
|
||||
else if (TabItemShifts == e.AddedItems[0] && !_calcRunning)
|
||||
{
|
||||
ViewModeShifts();
|
||||
}
|
||||
else if (TabItemShiftPlans == e.AddedItems[0])
|
||||
{
|
||||
ViewModeShiftPlans();
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------------------Helper------------------------------------------------------
|
||||
|
||||
private void PersonListChanged(object? sender, EventArgs e)
|
||||
{
|
||||
}
|
||||
|
||||
private void ShiftListChanged(object? sender, EventArgs e)
|
||||
{
|
||||
}
|
||||
|
||||
private void ShiftPlansChanged(object? sender, NotifyCollectionChangedEventArgs e)
|
||||
{
|
||||
switch (e)
|
||||
{
|
||||
case { Action: NotifyCollectionChangedAction.Add, NewItems: not null }:
|
||||
_dispatcher.InvokeAsync(() =>
|
||||
{
|
||||
foreach (object item in e.NewItems)
|
||||
{
|
||||
ListViewShiftPlans.Items.Add(item);
|
||||
}
|
||||
}, DispatcherPriority.Background);
|
||||
break;
|
||||
case { Action: NotifyCollectionChangedAction.Remove, OldItems: not null }:
|
||||
_dispatcher.InvokeAsync(() =>
|
||||
{
|
||||
foreach (object item in e.OldItems)
|
||||
{
|
||||
ListViewShiftPlans.Items.Remove(item);
|
||||
}
|
||||
});
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void FilterListChanged(object? sender, NotifyCollectionChangedEventArgs e)
|
||||
{
|
||||
switch (e)
|
||||
{
|
||||
case { Action: NotifyCollectionChangedAction.Add, NewItems: not null }:
|
||||
{
|
||||
foreach (Filter filter in e.NewItems)
|
||||
{
|
||||
_filters[filter] = new FilterElement(_appService, filter);
|
||||
StackPanelFilterList.Children.Add(_filters[filter]);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case { Action: NotifyCollectionChangedAction.Remove, OldItems: not null }:
|
||||
{
|
||||
foreach (Filter filter in e.OldItems)
|
||||
{
|
||||
StackPanelFilterList.Children.Remove(_filters[filter]);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void LoadData()
|
||||
{
|
||||
List<Person> persons = _appService.PersonService.GetPersonList().ToList();
|
||||
List<Shift> shifts = _appService.ShiftService.GetShiftList().ToList();
|
||||
|
||||
LoadDataFromFile.LoadPersonShiftConnections(persons, shifts, _appService);
|
||||
}
|
||||
|
||||
private void DeactivateView()
|
||||
{
|
||||
ButtonAddPerson.IsEnabled = false;
|
||||
ButtonEditPerson.IsEnabled = false;
|
||||
ButtonDeletePerson.IsEnabled = false;
|
||||
ButtonAddShiftToPerson.IsEnabled = false;
|
||||
|
||||
ButtonOpenShiftPlan.IsEnabled = false;
|
||||
ButtonSaveShiftPlans.IsEnabled = false;
|
||||
ButtonFilterShiftPlans.IsEnabled = false;
|
||||
ButtonResetAllFilters.IsEnabled = false;
|
||||
|
||||
ButtonAddShift.IsEnabled = false;
|
||||
ButtonEditShift.IsEnabled = false;
|
||||
ButtonDeleteShift.IsEnabled = false;
|
||||
ButtonAddPersonToShift.IsEnabled = false;
|
||||
}
|
||||
|
||||
private void ViewModePersons()
|
||||
{
|
||||
DeactivateView();
|
||||
ButtonAddPerson.IsEnabled = true;
|
||||
ButtonEditPerson.IsEnabled = true;
|
||||
ButtonDeletePerson.IsEnabled = true;
|
||||
ButtonAddShiftToPerson.IsEnabled = true;
|
||||
}
|
||||
|
||||
private void ViewModeShifts()
|
||||
{
|
||||
DeactivateView();
|
||||
ButtonAddShift.IsEnabled = true;
|
||||
ButtonEditShift.IsEnabled = true;
|
||||
ButtonDeleteShift.IsEnabled = true;
|
||||
ButtonAddPersonToShift.IsEnabled = true;
|
||||
}
|
||||
|
||||
private void ViewModeShiftPlans()
|
||||
{
|
||||
if (_calcRunning) return;
|
||||
DeactivateView();
|
||||
ButtonOpenShiftPlan.IsEnabled = true;
|
||||
ButtonSaveShiftPlans.IsEnabled = true;
|
||||
ButtonFilterShiftPlans.IsEnabled = true;
|
||||
ButtonResetAllFilters.IsEnabled = true;
|
||||
}
|
||||
|
||||
private void ViewModeCalcRunning()
|
||||
{
|
||||
if (_calcRunning)
|
||||
{
|
||||
ButtonOpenShiftPlan.IsEnabled = false;
|
||||
ButtonSaveShiftPlans.IsEnabled = false;
|
||||
ButtonFilterShiftPlans.IsEnabled = false;
|
||||
ButtonResetAllFilters.IsEnabled = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
ButtonOpenShiftPlan.IsEnabled = true;
|
||||
ButtonSaveShiftPlans.IsEnabled = true;
|
||||
ButtonFilterShiftPlans.IsEnabled = true;
|
||||
ButtonResetAllFilters.IsEnabled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user