using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using Comal.Classes;
using InABox.Configuration;
using InABox.Core;
namespace PRSDesktop
{
///
/// Interaction logic for TimesheetPanel.xaml
///
public partial class TimesheetPanel : UserControl, IPanel
{
public TimeSheetSettings _settings;
public TimesheetPanel()
{
InitializeComponent();
}
public event DataModelUpdateEvent OnUpdateDataModel;
public bool IsReady { get; set; }
public void Setup()
{
LoadSettings();
TimeSheets.Refresh(true, false);
}
public Dictionary Selected()
{
return new Dictionary { { typeof(TimeSheet).EntityName(), TimeSheets.SelectedRows } };
}
public void Shutdown()
{
}
public void CreateToolbarButtons(IPanelHost host)
{
//host.CreateToolbarButton(new PanelAction() { Caption = "Process", Image = PRSDesktop.Resources.doc_xls, OnExecute = ProcessTimesheets });
}
public string SectionName => "Timesheets";
public DataModel DataModel(Selection selection)
{
var ids = TimeSheets.ExtractValues(x => x.ID, selection).ToArray();
return new BaseDataModel(new Filter(x => x.ID).InList(ids.ToArray()));
}
public void Refresh()
{
TimeSheets.StartDate = StartPicker.SelectedDate.Value;
if (FutureTimes.IsChecked == true)
TimeSheets.EndDate = EndPicker.SelectedDate.Value;
else
TimeSheets.EndDate = EndPicker.SelectedDate.Value > DateTime.Today ? DateTime.Today : EndPicker.SelectedDate.Value;
TimeSheets.Search = Search.Text;
TimeSheets.ApprovedOnly = ApprovedTimes.IsChecked == true;
TimeSheets.Refresh(false, true);
}
public void Heartbeat(TimeSpan time)
{
}
private void LoadSettings()
{
_settings = new UserConfiguration().Load();
StartPicker.SelectedDate = _settings.StartDate;
EndPicker.SelectedDate = _settings.EndDate;
View.SelectedIndex = _settings.View;
UpdateStartFinishDates();
FutureTimes.IsChecked = _settings.FutureTimes;
ApprovedTimes.IsChecked = _settings.ApprovedOnly;
}
private void SaveSettings()
{
if (IsReady)
{
_settings.View = View.SelectedIndex;
_settings.StartDate = StartPicker.SelectedDate.HasValue ? StartPicker.SelectedDate.Value : DateTime.Today;
_settings.EndDate = EndPicker.SelectedDate.HasValue ? EndPicker.SelectedDate.Value : DateTime.Today;
_settings.FutureTimes = FutureTimes.IsChecked == true;
_settings.ApprovedOnly = ApprovedTimes.IsChecked == true;
new UserConfiguration().Save(_settings);
}
}
private void UpdateStartEndPicker(DateTime start, DateTime end)
{
if (StartPicker == null || EndPicker == null)
return;
StartPicker.IsEnabled = false;
EndPicker.IsEnabled = false;
StartPicker.SelectedDate = start;
EndPicker.SelectedDate = end;
}
private void View_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
UpdateStartFinishDates();
}
private void UpdateStartFinishDates()
{
if (View.SelectedIndex == 0)
{
UpdateStartEndPicker(DateTime.Today, DateTime.Today);
}
else if (View.SelectedIndex == 1)
{
UpdateStartEndPicker(DateTime.Today.AddDays(0 - 1), DateTime.Today.AddDays(0 - 1));
}
else if (View.SelectedIndex == 2)
{
UpdateStartEndPicker(DateTime.Today.AddDays(0 - (double)DateTime.Today.DayOfWeek).AddDays(1),
DateTime.Today.AddDays(0 - (double)DateTime.Today.DayOfWeek).AddDays(7));
}
else if (View.SelectedIndex == 3)
{
UpdateStartEndPicker(DateTime.Today.AddDays(0 - (double)DateTime.Today.DayOfWeek).AddDays(0 - 6),
DateTime.Today.AddDays(0 - (double)DateTime.Today.DayOfWeek));
}
else if (View.SelectedIndex == 4)
{
UpdateStartEndPicker(new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1),
new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1).AddMonths(1).AddDays(0 - 1));
}
else if (View.SelectedIndex == 5)
{
UpdateStartEndPicker(new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1).AddMonths(0 - 1),
new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1).AddDays(0 - 1));
}
else if (View.SelectedIndex == 6)
{
UpdateStartEndPicker(new DateTime(DateTime.Today.Year, 1, 1), new DateTime(DateTime.Today.Year, 1, 1).AddYears(1).AddDays(0 - 1));
}
else if (View.SelectedIndex == 7)
{
UpdateStartEndPicker(new DateTime(DateTime.Today.Year, 1, 1).AddYears(0 - 1), new DateTime(DateTime.Today.Year, 1, 1).AddDays(0 - 1));
}
else
{
StartPicker.IsEnabled = true;
EndPicker.IsEnabled = true;
}
if (!IsReady)
return;
SaveSettings();
Refresh();
}
private void SelectedDateChanged(object sender, SelectionChangedEventArgs e)
{
if (!StartPicker.IsEnabled || !EndPicker.IsEnabled || !IsReady)
return;
SaveSettings();
Refresh();
}
private void Search_KeyUp(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter || e.Key == Key.Return)
Refresh();
}
private void FutureTimes_Checked(object sender, RoutedEventArgs e)
{
if (!IsReady)
return;
SaveSettings();
Refresh();
}
private void ApprovedTimes_Checked(object sender, RoutedEventArgs e)
{
if (!IsReady)
return;
SaveSettings();
Refresh();
}
}
}