| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Drawing;
- using System.Linq;
- using System.Runtime.CompilerServices;
- using System.Windows;
- using System.Windows.Media.Imaging;
- using Comal.Classes;
- using Geocoding;
- using InABox.Core;
- using InABox.DynamicGrid;
- using InABox.WPF;
- namespace PRSDesktop
- {
- public class AssignmentAppointment : CalendarAppointment<Assignment>
- {
- public CalendarAssignmentType AssignmentType { get; }
- public override TimeSpan StartTime
- {
- get => AssignmentType switch
- {
- CalendarAssignmentType.Booked => Model.Booked.Start,
- CalendarAssignmentType.Actual => Model.Actual.Start,
- _ => Model.EffectiveStartTime()
- };
- set
- {
- switch (AssignmentType)
- {
- case CalendarAssignmentType.Automatic:
- case CalendarAssignmentType.Actual:
- Model.Actual.Start = value;
- break;
- case CalendarAssignmentType.Booked:
- Model.Booked.Start = value;
- break;
- }
- OnUpdate?.Invoke();
- }
- }
-
- public override TimeSpan EndTime
- {
- get => AssignmentType switch
- {
- CalendarAssignmentType.Booked => Model.Booked.Finish,
- CalendarAssignmentType.Actual => Model.Actual.Finish,
- _ => Model.EffectiveFinishTime()
- };
- set
- {
- switch (AssignmentType)
- {
- case CalendarAssignmentType.Automatic:
- case CalendarAssignmentType.Actual:
- Model.Actual.Finish = value;
- break;
- case CalendarAssignmentType.Booked:
- Model.Booked.Finish = value;
- break;
- }
- OnUpdate?.Invoke();
- }
- }
- public override bool CanAdjust => true;
- public override DateTime Date => Model.Date;
- public event Action? OnUpdate;
-
- public AssignmentAppointment(Assignment model, Employee employee, CalendarAssignmentType type)
- : base(model, employee, x => x.ActivityLink.Color)
- {
- AssignmentType = type;
-
- Notes = Model.Description;
- Subject = GetSubject();
- Image = GetImage();
- WeakEventManager<Assignment, PropertyChangedEventArgs>.AddHandler(model, nameof(Assignment.PropertyChanged), Assignment_Changed);
- }
- private static Column<Assignment>[] SubjectColumns = [
- new(x => x.Number),
- new(x => x.JobLink.JobNumber),
- new(x => x.ITP.Code),
- new(x => x.Task.Number),
- new(x => x.Meeting.Link.Number),
- new(x => x.Title),
- ];
- private string GetSubject()
- {
- var subject = new List<string>() { Model.Number.ToString() };
- if (Model.JobLink.ID != Guid.Empty)
- subject.Add(
- Model.ITP.ID != Guid.Empty
- ? $"{Model.JobLink.JobNumber}-{Model.ITP.Code}"
- : $"{Model.JobLink.JobNumber}"
- );
- if (Model.Task.ID != Guid.Empty)
- subject.Add($"Task {Model.Task.Number}");
- if (Model.Meeting.Link.ID != Guid.Empty)
- subject.Add($"Mtg {Model.Meeting.Link.Number}");
-
- subject.Add(Model.Title ?? "");
- return string.Join(" ", subject);
- }
- private static Column<Assignment>[] ImageColumns = [
- new(x => x.Completed),
- new(x => x.Delivery.ID),
- new(x => x.Meeting.Link.ID),
- ];
- private BitmapImage? GetImage()
- {
- var images = new List<Bitmap>();
- if (!Model.Completed.IsEmpty())
- images.Add(Resources.tick_sml.Resize(32,32));
- if (Model.Delivery.ID != Guid.Empty)
- images.Add(Resources.box_sml.Resize(32,32));
- if (Model.Meeting.Link.ID != Guid.Empty)
- images.Add(Resources.employees.Resize(32,32));
- return ImageUtils.MergeBitmaps(images, 10)?.AsBitmapImage();
- }
- private static Column<Assignment>[] StartColumns = [
- new(x => x.Booked.Start),
- new(x => x.Actual.Start),
- ];
- private static Column<Assignment>[] FinishColumns = [
- new(x => x.Booked.Finish),
- new(x => x.Actual.Finish),
- ];
- private void Assignment_Changed(object? sender, PropertyChangedEventArgs e)
- {
- if(StartColumns.Any(x => x.Property == e.PropertyName))
- {
- OnPropertyChanged(nameof(StartTime));
- }
- else if(FinishColumns.Any(x => x.Property == e.PropertyName))
- {
- OnPropertyChanged(nameof(EndTime));
- }
- else if(e.PropertyName == nameof(Assignment.Date))
- {
- OnPropertyChanged(nameof(Date));
- }
- else if(e.PropertyName == $"{nameof(Assignment.EmployeeLink)}.{nameof(Employee.ID)}")
- {
- EmployeeChanged?.Invoke(this, new());
- }
- if(SubjectColumns.Any(x => x.Property == e.PropertyName))
- {
- Subject = GetSubject();
- OnPropertyChanged(nameof(Subject));
- }
- else if(e.PropertyName == nameof(Assignment.Description))
- {
- Notes = Model.Description;
- OnPropertyChanged(nameof(Notes));
- }
- else if(e.PropertyName == $"{nameof(Assignment.ActivityLink)}.{nameof(Assignment.ActivityLink.Color)}")
- {
- UpdateColour();
- OnPropertyChanged(nameof(Background));
- OnPropertyChanged(nameof(Foreground));
- }
- if(ImageColumns.Any(x => x.Property == e.PropertyName))
- {
- Image = GetImage();
- OnPropertyChanged(nameof(Image));
- }
- }
- public event EventHandler<EventArgs>? EmployeeChanged;
- }
- }
|