27c21175d7
Migrate much of BI to Services. Added Wireless Profile Provider plugin feature. Added Certificate Authority Provider plugin feature. Modified Certificate Provider plugin feature. Database migration v17, for Device Profiles. Enrolment Client Updated to support CA Certificates, Wireless Profiles and Hardware Info. New Client Enrolment Protocol to support new features. Plugin Manifest Generator added to main solution. Improved AD search performance.
111 lines
5.8 KiB
C#
111 lines
5.8 KiB
C#
using Disco.Data.Repository;
|
|
using Disco.Data.Repository.Monitor;
|
|
using Disco.Models.Repository;
|
|
using System;
|
|
using System.Linq;
|
|
using System.Reactive.Linq;
|
|
using System.Reactive.Subjects;
|
|
|
|
namespace Disco.Services.Documents.ManagedGroups
|
|
{
|
|
public static class DocumentTemplateManagedGroups
|
|
{
|
|
internal static Lazy<IObservable<RepositoryMonitorEvent>> DeviceAttachmentAddRepositoryEvents;
|
|
internal static Lazy<IObservable<RepositoryMonitorEvent>> JobAttachmentAddRepositoryEvents;
|
|
internal static Lazy<IObservable<RepositoryMonitorEvent>> UserAttachmentAddRepositoryEvents;
|
|
|
|
internal static Lazy<Subject<Tuple<DiscoDataContext, int, string, string>>> DeviceAttachmentRemoveEvents;
|
|
internal static Lazy<Subject<Tuple<DiscoDataContext, int, string, int>>> JobAttachmentRemoveEvents;
|
|
internal static Lazy<Subject<Tuple<DiscoDataContext, int, string, string>>> UserAttachmentRemoveEvents;
|
|
|
|
internal static Lazy<IObservable<RepositoryMonitorEvent>> DeviceRenameRepositoryEvents;
|
|
internal static Lazy<IObservable<RepositoryMonitorEvent>> JobCloseRepositoryEvents;
|
|
internal static Lazy<IObservable<RepositoryMonitorEvent>> DeviceAssignmentRepositoryEvents;
|
|
|
|
static DocumentTemplateManagedGroups()
|
|
{
|
|
DeviceAttachmentAddRepositoryEvents =
|
|
new Lazy<IObservable<RepositoryMonitorEvent>>(() =>
|
|
RepositoryMonitor.StreamAfterCommit.Where(e =>
|
|
e.EntityType == typeof(DeviceAttachment) &&
|
|
((DeviceAttachment)e.Entity).DocumentTemplateId != null &&
|
|
e.EventType == RepositoryMonitorEventType.Added
|
|
));
|
|
JobAttachmentAddRepositoryEvents =
|
|
new Lazy<IObservable<RepositoryMonitorEvent>>(() =>
|
|
RepositoryMonitor.StreamAfterCommit.Where(e =>
|
|
e.EntityType == typeof(JobAttachment) &&
|
|
((JobAttachment)e.Entity).DocumentTemplateId != null &&
|
|
e.EventType == RepositoryMonitorEventType.Added
|
|
));
|
|
UserAttachmentAddRepositoryEvents =
|
|
new Lazy<IObservable<RepositoryMonitorEvent>>(() =>
|
|
RepositoryMonitor.StreamAfterCommit.Where(e =>
|
|
e.EntityType == typeof(UserAttachment) &&
|
|
((UserAttachment)e.Entity).DocumentTemplateId != null &&
|
|
e.EventType == RepositoryMonitorEventType.Added
|
|
));
|
|
|
|
DeviceAttachmentRemoveEvents =
|
|
new Lazy<Subject<Tuple<DiscoDataContext, int, string, string>>>(() => new Subject<Tuple<DiscoDataContext, int, string, string>>());
|
|
JobAttachmentRemoveEvents =
|
|
new Lazy<Subject<Tuple<DiscoDataContext, int, string, int>>>(() => new Subject<Tuple<DiscoDataContext, int, string, int>>());
|
|
UserAttachmentRemoveEvents =
|
|
new Lazy<Subject<Tuple<DiscoDataContext, int, string, string>>>(() => new Subject<Tuple<DiscoDataContext, int, string, string>>());
|
|
|
|
DeviceRenameRepositoryEvents =
|
|
new Lazy<IObservable<RepositoryMonitorEvent>>(() =>
|
|
RepositoryMonitor.StreamBeforeCommit.Where(e =>
|
|
e.EntityType == typeof(Device) &&
|
|
e.EventType == RepositoryMonitorEventType.Modified &&
|
|
e.ModifiedProperties.Contains("DeviceDomainId")
|
|
));
|
|
JobCloseRepositoryEvents =
|
|
new Lazy<IObservable<RepositoryMonitorEvent>>(() =>
|
|
RepositoryMonitor.StreamAfterCommit.Where(e =>
|
|
e.EntityType == typeof(Job) &&
|
|
(((Job)e.Entity).DeviceSerialNumber != null || ((Job)e.Entity).UserId != null) &&
|
|
e.EventType == RepositoryMonitorEventType.Modified &&
|
|
e.ModifiedProperties.Contains("ClosedDate")
|
|
));
|
|
DeviceAssignmentRepositoryEvents =
|
|
new Lazy<IObservable<RepositoryMonitorEvent>>(() =>
|
|
RepositoryMonitor.StreamBeforeCommit.Where(e =>
|
|
e.EntityType == typeof(Device) &&
|
|
e.EventType == RepositoryMonitorEventType.Modified &&
|
|
e.ModifiedProperties.Contains("AssignedUserId")
|
|
));
|
|
}
|
|
|
|
public static void Initialize(DiscoDataContext Database)
|
|
{
|
|
Database.DocumentTemplates
|
|
.Where(dp => dp.DevicesLinkedGroup != null || dp.UsersLinkedGroup != null)
|
|
.ToList()
|
|
.ForEach(dp =>
|
|
{
|
|
DocumentTemplateDevicesManagedGroup.Initialize(dp);
|
|
DocumentTemplateUsersManagedGroup.Initialize(dp);
|
|
});
|
|
}
|
|
|
|
public static void TriggerDeviceAttachmentDeleted(DiscoDataContext Database, int AttachmentId, string DocumentTemplateId, string DeviceSerialNumber)
|
|
{
|
|
if (DocumentTemplateId != null)
|
|
DeviceAttachmentRemoveEvents.Value.OnNext(Tuple.Create(Database, AttachmentId, DocumentTemplateId, DeviceSerialNumber));
|
|
}
|
|
|
|
public static void TriggerJobAttachmentDeleted(DiscoDataContext Database, int AttachmentId, string DocumentTemplateId, int JobId)
|
|
{
|
|
if (DocumentTemplateId != null)
|
|
JobAttachmentRemoveEvents.Value.OnNext(Tuple.Create(Database, AttachmentId, DocumentTemplateId, JobId));
|
|
}
|
|
|
|
public static void TriggerUserAttachmentDeleted(DiscoDataContext Database, int AttachmentId, string DocumentTemplateId, string UserId)
|
|
{
|
|
if (DocumentTemplateId != null)
|
|
UserAttachmentRemoveEvents.Value.OnNext(Tuple.Create(Database, AttachmentId, DocumentTemplateId, UserId));
|
|
}
|
|
}
|
|
}
|