123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Windows;
- using System.Windows.Controls;
- using Comal.Classes;
- using InABox.Clients;
- using InABox.Configuration;
- using InABox.Core;
- using InABox.DynamicGrid;
- using InABox.WPF;
- namespace PRSDesktop
- {
- /// <summary>
- /// Interaction logic for DeliveryPanel.xaml
- /// </summary>
- public partial class DeliveryPanel : UserControl, IPanel<Delivery>, IJobControl
- {
- private DeliveryScreenSettings settings;
- public DeliveryPanel()
- {
- InitializeComponent();
- Deliveries.OnSelectItem += Deliveries_OnSelectItem;
- Requis.OnChanged += OnChanged;
- Racks.OnChanged += OnChanged;
- Bookings.SettingsChanged += (sender, settings) => SaveSettings(settings);
- }
-
- private void SaveSettings(AssignmentViewSettings settings)
- {
- var schedulesettings = new ScheduleSettings()
- {
- Date = settings.SelectedDate,
- Zoom = settings.Zoom,
- GroupID = settings.SelectedTeam,
- SelectedEmployees = settings.SelectedEmployees.ToList()
- };
- new UserConfiguration<ScheduleSettings>("Deliveries").Save(schedulesettings);
- }
- public Guid JobID
- {
- get => Deliveries.JobID;
- set
- {
- Deliveries.JobID = value;
- Items.JobID = value;
- Racks.JobID = value;
- Requis.JobID = value;
- }
- }
- public bool IsReady { get; set; }
- public event DataModelUpdateEvent OnUpdateDataModel;
- public void Setup()
- {
- settings = new UserConfiguration<DeliveryScreenSettings>().Load();
- SplitPanel.View = settings.ViewType == ScreenViewType.Register ? DynamicSplitPanelView.Master :
- settings.ViewType == ScreenViewType.Details ? DynamicSplitPanelView.Detail : DynamicSplitPanelView.Combined;
- SplitPanel.MasterWidth = settings.DeliveryColumnWidth;
- Bookings.Setup();
-
- var schedulesettings = new UserConfiguration<ScheduleSettings>("Deliveries").Load();
- Bookings.Zoom = schedulesettings.Zoom;
- Bookings.SelectedTeam = schedulesettings.GroupID;
- Bookings.SelectedEmployees = schedulesettings.SelectedEmployees.ToArray();
- Bookings.SelectedDate = schedulesettings.Date.IsEmpty() ? DateTime.Today : schedulesettings.Date;
- Bookings.Refresh();
- Deliveries.ColumnsTag = settings.ViewType == ScreenViewType.Register ? settings.ViewType.ToString() : "";
- Deliveries.Refresh(true, false);
- Items.Refresh(true, false);
- Racks.Refresh(true, false);
- Requis.Refresh(true, false);
- }
- public void Shutdown()
- {
- }
- public void CreateToolbarButtons(IPanelHost host)
- {
- if (Security.IsAllowed<CanCompleteDeliveries>())
- host.CreatePanelAction(new PanelAction
- { Caption = "Mark As Delivered", Image = PRSDesktop.Resources.barcode, OnExecute = MarkAsDelivered });
- if (Security.IsAllowed<CanArchiveDeliveries>())
- host.CreatePanelAction(
- new PanelAction { Caption = "Archive Delivery", Image = PRSDesktop.Resources.archive, OnExecute = ArchiveDelivery });
- }
- public string SectionName => "Deliveries";
- public DataModel DataModel(Selection selection)
- {
- var ids = Deliveries.ExtractValues(x => x.ID, selection).ToArray();
- return new DeliveryDataModel(new Filter<Delivery>(x => x.ID).InList(ids));
- }
- public void Refresh()
- {
- Racks.Refresh(false, true);
- Requis.Refresh(false, true);
- Deliveries.Refresh(false, true);
- Bookings.Refresh();
- }
- public Dictionary<string, object[]> Selected()
- {
- return new Dictionary<string, object[]> { { typeof(Delivery).EntityName(), Deliveries.SelectedRows } };
- }
- public void Heartbeat(TimeSpan time)
- {
- }
- private void OnChanged(IDynamicGrid sender)
- {
- Deliveries.Refresh(false, false);
- }
- private void ArchiveDelivery(PanelAction obj)
- {
- if (!Deliveries.SelectedRows.Any())
- {
- MessageBox.Show("Please select a Delivery first!");
- return;
- }
- var completed = Deliveries.SelectedRows.First().Get<Delivery, DateTime>(x => x.Completed);
- if (!completed.IsEmpty())
- {
- MessageBox.Show("Delivery has already been completed!");
- return;
- }
- var delivered = Deliveries.SelectedRows.First().Get<Delivery, DateTime>(x => x.Delivered);
- if (delivered.IsEmpty())
- {
- MessageBox.Show("This Delivery must be marked as delivered before it can be Archived.");
- return;
- }
- if (MessageBox.Show("This will archive this delivery, and remove it from the active deliveries list.\n\nDo you wish to continue?",
- "Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.No)
- return;
- Progress.Show("Archiving Delivery");
- try
- {
- var notification = new DeliveryNotification();
- notification.Delivery.ID = Deliveries.SelectedRows.First().Get<Delivery, Guid>(x => x.ID);
- new Client<DeliveryNotification>().Save(notification, "Manual Delivery Notification");
- var delivery = new Delivery
- {
- ID = Deliveries.SelectedRows.First().Get<Delivery, Guid>(x => x.ID),
- Number = Deliveries.SelectedRows.First().Get<Delivery, int>(x => x.Number),
- Completed = DateTime.Now
- };
- new Client<Delivery>().Save(delivery, "Marked as Completed");
- }
- finally
- {
- Progress.Close();
- }
- MessageBox.Show("Delivery Archived");
- Deliveries.Refresh(false, true);
- }
- private void MarkAsDelivered(PanelAction obj)
- {
- if (!Deliveries.SelectedRows.Any())
- {
- MessageBox.Show("Please select a Delivery first!");
- return;
- }
- var completed = Deliveries.SelectedRows.First().Get<Delivery, DateTime>(x => x.Completed);
- if (!completed.IsEmpty())
- {
- MessageBox.Show("Delivery has already been completed!");
- return;
- }
- var docs = Deliveries.SelectedRows.First().Get<Delivery, int>(x => x.Documents);
- if (docs == 0 && !Security.IsAllowed<CanSkipDeliveryPhotos>())
- {
- MessageBox.Show("Please photograph these items before completing this delivery");
- return;
- }
- if (MessageBox.Show("Are you sure you wish to mark this Delivery as delivered?", "Confirmation", MessageBoxButton.YesNo) !=
- MessageBoxResult.Yes)
- return;
- Progress.Show("Completing Delivery");
- try
- {
- var delivery = new Delivery
- {
- ID = Deliveries.SelectedRows.First().Get<Delivery, Guid>(x => x.ID),
- Number = Deliveries.SelectedRows.First().Get<Delivery, int>(x => x.Number),
- Delivered = DateTime.Now
- };
- delivery.Job.ID = Deliveries.SelectedRows.First().Get<Delivery, Guid>(x => x.Job.ID);
- new Client<Delivery>().Save(delivery, "Marked as Delivered");
- }
- finally
- {
- Progress.Close();
- }
- MessageBox.Show("Delivery Completed");
- Deliveries.Refresh(false, true);
- }
- private void Deliveries_OnSelectItem(object sender, DynamicGridSelectionEventArgs e)
- {
- var row = e.Rows?.FirstOrDefault();
- var jobid = row == null ? CoreUtils.FullGuid : row.Get<Delivery, Guid>(x => x.Job.ID);
- var deliveryid = row == null ? CoreUtils.FullGuid : row.Get<Delivery, Guid>(x => x.ID);
- var completed = row == null ? DateTime.MinValue : row.Get<Delivery, DateTime>(x => x.Completed);
- var notes = row == null ? "" : row.Get<Delivery, string>(x => x.Notes);
- Notes.Text = notes;
- Items.JobID = jobid;
- Items.DeliveryID = deliveryid;
- Items.Completed = completed;
- Items.Refresh(false, true);
- Racks.JobID = jobid;
- Racks.DeliveryID = deliveryid;
- Racks.Completed = completed;
- Racks.Refresh(false, true);
- Requis.JobID = jobid;
- Requis.DeliveryID = deliveryid;
- Requis.Completed = completed;
- Requis.Refresh(false, true);
- }
- private void Bookings_SelectionChanged(object sender, Assignment assignment)
- {
- // ToDo: Fix this!!!! Need to implement AssignmentView.SelectedEmployee
- Deliveries.BookingSlot = Bookings.SelectedDate;
- //Deliveries.EmployeeID = Bookings.SelectedEmployee;
- Deliveries.Refresh(false, false);
- }
- private void Bookings_AssignmentChanged(object sender, Assignment assignment)
- {
- Deliveries.Refresh(false, true);
- }
- private void Deliveries_DeliveryChanged(object sender)
- {
- Bookings.Refresh();
- }
- private void SplitPanel_OnChanged(object sender, DynamicSplitPanelChangedArgs e)
- {
- settings.ViewType = SplitPanel.View == DynamicSplitPanelView.Master ? ScreenViewType.Register :
- SplitPanel.View == DynamicSplitPanelView.Detail ? ScreenViewType.Details : ScreenViewType.Combined;
- settings.DeliveryColumnWidth = SplitPanel.MasterWidth;
- var newTag = settings.ViewType == ScreenViewType.Register ? settings.ViewType.ToString() : "";
- if (Deliveries.ColumnsTag != newTag)
- {
- Deliveries.ColumnsTag = newTag;
- Deliveries.Refresh(true, true);
- }
- new UserConfiguration<DeliveryScreenSettings>().Save(settings);
- }
- private void Bookings_OnCustomiseContextMenu(ContextMenu menu, IAssignmentData args)
- {
- menu.Items.Clear();
- if (args.Model != null)
- {
- Bookings.CreateEditMenu(menu, args);
- menu.Items.Add(new Separator());
- Bookings.CreateDeleteMenu(menu, args);
- menu.Items.Add(new Separator());
- }
- else
- {
- bool bDeliveries = false;
- var CreateBooking = new MenuItem { Header = "Book Delivery" };
- foreach (var row in Deliveries.Data.Rows)
- {
- if (row.Get<Delivery, DateTime>(x => x.Assignment.Date).IsEmpty())
- {
- bDeliveries = true;
- MenuItem item = new MenuItem();
- String description = String.Format("{0}: ", row.Get<Delivery, int>(x => x.Number));
- if (row.IsEntityLinkValid<Delivery, JobLink>(x => x.Job))
- {
- description = String.Format("{0} {1} ({2})",
- description,
- row.Get<Delivery, String>(x => x.Job.Name),
- row.Get<Delivery, String>(x => x.Job.JobNumber)
- );
- }
- else if (row.IsEntityLinkValid<Delivery, ContactLink>(x => x.Contact))
- {
- description = String.Format("{0} {1}",
- description,
- row.Get<Delivery, String>(x => x.Contact.Name)
- );
- }
- item.Header = description;
- item.Tag = new Tuple<CoreRow, Guid, DateTime>(row, args.EmployeeID, args.Time);
- item.Click += BookNow;
- CreateBooking.Items.Add(item);
- }
- }
- if (bDeliveries)
- {
- menu.Items.Add(CreateBooking);
- menu.Items.Add(new Separator());
- }
- }
-
- Bookings.CreateZoomMenus(menu, args);
- }
- private void BookNow(object sender, RoutedEventArgs e)
- {
- Tuple<CoreRow, Guid, DateTime> data = (sender as MenuItem).Tag as Tuple<CoreRow, Guid, DateTime>;
- if (Deliveries.CreateBooking(data.Item1, data.Item2, data.Item3))
- Refresh();
- }
- }
- }
|