using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Windows.Controls;
using System.Windows.Input;
using Comal.Classes;
using InABox.Configuration;
using InABox.Core;
namespace PRSDesktop
{
///
/// Interaction logic for InstallationPanel.xaml
///
public partial class DeliveredOnSitePanel : UserControl, IPanel
{
private bool _changing = false;
private string _search = "";
public DeliveredOnSiteSettings _settings;
public DeliveredOnSitePanel()
{
InitializeComponent();
}
public bool IsReady { get; set; }
public Dictionary Selected()
{
return new Dictionary { { typeof(DeliveryItem).EntityName(), Items.SelectedRows } };
}
public void Setup()
{
LoadSettings();
Items.Refresh(true, false);
}
public void Shutdown()
{
}
public void CreateToolbarButtons(IPanelHost host)
{
//host.CreateToolbarButton(new PanelAction() { Caption = "Design Report", OnExecute = DesignReport, Image = PRSDesktop.Resources.edit });
//host.CreateToolbarButton(new PanelAction() { Caption = "View Report", OnExecute = ViewReport, Image = PRSDesktop.Resources.refresh });
}
public void Refresh()
{
Items.StartDate = StartPicker.SelectedDate.Value;
Items.EndDate = EndPicker.SelectedDate.Value;
Items.Search = Search.Text;
Items.Refresh(false, true);
}
public string SectionName => "Delivered On Site";
public DataModel DataModel(Selection selection)
{
var ids = Items.ExtractValues(x => x.ID, selection).ToArray();
return new DeliveryItemDataModel(new Filter(x => x.ID).InList(ids));
}
public event DataModelUpdateEvent OnUpdateDataModel;
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();
}
private void SaveSettings()
{
if (IsReady)
{
_settings.View = View.SelectedIndex;
_settings.StartDate = StartPicker.SelectedDate.Value;
_settings.EndDate = EndPicker.SelectedDate.Value;
new UserConfiguration().Save(_settings);
}
}
private Filter SearchFilter(Expression> expression)
{
Filter result = null;
var comps = _search.Trim().Split(' ');
foreach (var comp in comps)
result = result == null ? new Filter(expression).Contains(comp) : result.And(expression).Contains(comp);
return result;
}
private void Items_OnReload(object sender, Filters criteria, Columns columns, ref SortOrder sortby)
{
}
public Type DataType()
{
return typeof(DeliveryItem);
}
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 ViewStyle_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 (string.IsNullOrWhiteSpace(Search.Text) || e.Key == Key.Return)
{
_search = Search.Text;
Refresh();
}
}
}
}