Files
Disco/Disco.Services/Devices/DeviceBatchExtensions.cs
T
2025-07-20 12:00:57 +10:00

52 lines
1.7 KiB
C#

using Disco.Data.Repository;
using Disco.Models.Repository;
using Disco.Services.Authorization;
using Disco.Services.Devices.ManagedGroups;
using Disco.Services.Interop.ActiveDirectory;
using Disco.Services.Users;
using System;
using System.Linq;
namespace Disco.Services
{
public static class DeviceBatchExtensions
{
public static bool CanDelete(this DeviceBatch db, DiscoDataContext database)
{
if (!UserService.CurrentAuthorization.Has(Claims.Config.DeviceBatch.Delete))
return false;
// Can't Delete if Contains Devices
if (database.Devices.Any(d => d.DeviceBatchId == db.Id))
return false;
return true;
}
public static void Delete(this DeviceBatch db, DiscoDataContext database)
{
if (!db.CanDelete(database))
throw new InvalidOperationException("The state of this Device Batch doesn't allow it to be deleted");
// Remove Linked Group
ActiveDirectory.Context.ManagedGroups.Remove(DeviceBatchDevicesManagedGroup.GetKey(db));
ActiveDirectory.Context.ManagedGroups.Remove(DeviceBatchAssignedUsersManagedGroup.GetKey(db));
// Delete Batch
database.DeviceBatches.Remove(db);
}
public static bool CanDecommission(this DeviceBatch db, DiscoDataContext database)
{
if (!UserService.CurrentAuthorization.Has(Claims.Device.Actions.Import))
return false;
if (!database.Devices.Any(d => d.DeviceBatchId == db.Id && d.DecommissionedDate == null))
return false;
return true;
}
}
}