123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- using Comal.Classes;
- using InABox.Clients;
- using InABox.Core;
- using InABox.DynamicGrid;
- using Microsoft.CodeAnalysis.VisualBasic.Syntax;
- using PRSDesktop.WidgetGroups;
- using System;
- using System.Collections.Generic;
- using System.Globalization;
- using System.Linq;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Media;
- using Client = InABox.Clients.Client;
- namespace PRSDesktop.Dashboards
- {
- public class EquipmentSchedulesDashboardProperties : IDashboardProperties
- {
- }
- public class ScheduleViewModel
- {
- public Guid ID { get; set; }
- public string Title { get; set; }
- public DateTime DueDate { get; set; }
- }
- public class EquipmentScheduleViewModel
- {
- public Guid ID { get; set; }
- public string Code { get; set; }
- public string Description { get; set; }
- public List<ScheduleViewModel> Schedules { get; set; }
- }
- [ValueConversion(typeof(DateTime), typeof(SolidColorBrush))]
- class ScheduleBackgroundConverter : IValueConverter
- {
- public Color GetColor(DateTime date)
- {
- var diff = date - DateTime.Today;
- if (diff < TimeSpan.Zero)
- return Colors.Salmon;
- else if (diff.TotalDays <= 7)
- return Colors.Orange;
- else if (diff.Days <= 30)
- return Colors.LightYellow;
- else
- return Colors.LightGreen;
- }
- public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
- {
- var date = (DateTime)value;
- var color = GetColor(date);
- return new SolidColorBrush(color);
- }
- public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
- {
- throw new NotImplementedException();
- }
- }
- /// <summary>
- /// Interaction logic for EquipmentSchedulesDashboard.xaml
- /// </summary>
- public partial class EquipmentSchedulesDashboard : UserControl, IDashboardWidget<EquipmentDashboardGroup, EquipmentSchedulesDashboardProperties>
- {
- public EquipmentSchedulesDashboardProperties Properties { get; set; } = null!;
- public EquipmentSchedulesDashboard()
- {
- InitializeComponent();
- }
- public void Setup()
- {
- }
- public void Refresh()
- {
- var results = Client.QueryMultiple(
- new KeyedQueryDef<Equipment>(
- new Filter<Equipment>().All(),
- new Columns<Equipment>(x => x.ID)
- .Add(x => x.Code)
- .Add(x => x.Description)),
- new KeyedQueryDef<Schedule>(
- new Filter<Schedule>(x => x.DocumentClass).IsEqualTo(typeof(Equipment).EntityName()),
- new Columns<Schedule>(x => x.ID)
- .Add(x => x.Title)
- .Add(x => x.DueDate)
- .Add(x => x.DocumentID)));
- var equipmentItems = results.Get<Equipment>().Rows.Select(x => x.ToObject<Equipment>());
- var schedules = results.Get<Schedule>().Rows
- .Select(x => x.ToObject<Schedule>())
- .GroupBy(x => x.DocumentID)
- .ToDictionary(x => x.Key, x => x.OrderBy(x => x.DueDate).ToList());
- var models = new List<EquipmentScheduleViewModel>();
- foreach (var equipmentItem in equipmentItems)
- {
- var equipmentSchedules = schedules.GetValueOrDefault(equipmentItem.ID);
- if(equipmentSchedules is not null)
- {
- var model = new EquipmentScheduleViewModel
- {
- Code = equipmentItem.Code,
- Description = equipmentItem.Description,
- ID = equipmentItem.ID
- };
- model.Schedules = equipmentSchedules
- .Select(x => new ScheduleViewModel { Title = x.Title, DueDate = x.DueDate, ID = x.ID })
- .ToList() ?? new List<ScheduleViewModel>();
- models.Add(model);
- }
- }
- EquipmentList.ItemsSource = models;
- }
- public void Shutdown()
- {
- }
- private void ViewEquipment_Click(object sender, System.Windows.RoutedEventArgs e)
- {
- var equipmentID = (Guid)(sender as MenuItem)!.Tag;
- var equipment = new Client<Equipment>().Load(
- new Filter<Equipment>(x => x.ID).IsEqualTo(equipmentID)).FirstOrDefault();
- if(equipment != null)
- {
- var grid = DynamicGridUtils.CreateDynamicGrid(typeof(DynamicDataGrid<>), typeof(Equipment));
- if(grid.EditItems(new[] { equipment }))
- {
- new Client<Equipment>().Save(equipment, "Edited by user from schedules dashboard");
- Refresh();
- }
- }
- }
- private void ViewSchedule_Click(object sender, System.Windows.RoutedEventArgs e)
- {
- var scheduleID = (Guid)(sender as MenuItem)!.Tag;
- var schedule = new Client<Schedule>().Load(
- new Filter<Schedule>(x => x.ID).IsEqualTo(scheduleID)).FirstOrDefault();
- if (schedule != null)
- {
- var grid = DynamicGridUtils.CreateDynamicGrid(typeof(DynamicDataGrid<>), typeof(Schedule));
- if (grid.EditItems(new[] { schedule }))
- {
- new Client<Schedule>().Save(schedule, "Edited by user from schedules dashboard");
- Refresh();
- }
- }
- }
- }
- public class EquipmentSchedulesDashboardElement :
- DashboardElement<EquipmentSchedulesDashboard, EquipmentDashboardGroup, EquipmentSchedulesDashboardProperties> { }
- }
|