| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- 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.WPF;
- namespace PRSDesktop
- {
- public class AssignmentAppointment : CalendarAppointment<Assignment>, INotifyPropertyChanged
- {
- public CalendarAssignmentType AssignmentType { get; }
- public override TimeSpan StartTime => AssignmentType switch
- {
- CalendarAssignmentType.Booked => Model.Booked.Start,
- CalendarAssignmentType.Actual => Model.Actual.Start,
- _ => Model.EffectiveStartTime()
- };
- public override TimeSpan EndTime => AssignmentType switch
- {
- CalendarAssignmentType.Booked => Model.Booked.Finish,
- CalendarAssignmentType.Actual => Model.Actual.Finish,
- _ => Model.EffectiveFinishTime()
- };
- public override DateTime Date => Model.Date;
-
- public AssignmentAppointment(Assignment model, Employee employee, CalendarAssignmentType type)
- : base(model, employee, x => x.ActivityLink.Color)
- {
- AssignmentType = type;
-
- Notes = Model.Description;
-
- 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 ?? "");
- Subject = string.Join(" ", subject);
- 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));
- Image = ImageUtils.MergeBitmaps(images, 10)?.AsBitmapImage();
- WeakEventManager<Assignment, PropertyChangedEventArgs>.AddHandler(model, nameof(Assignment.PropertyChanged), Assignment_Changed);
- }
- 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));
- }
- }
- public event PropertyChangedEventHandler? PropertyChanged;
- private void OnPropertyChanged([CallerMemberName] string? propertyName = null)
- {
- PropertyChanged?.Invoke(this, new(propertyName));
- }
- }
- }
|