public void InitializeAvailableDevices(GKGuardZone zone) { AvailableDevices = new ObservableCollection<GuardZoneDeviceViewModel>(); foreach (var device in GKManager.Devices) { if (device.Driver.HasGuardZone && !zone.GuardZoneDevices.Any(x => x.DeviceUID == device.UID)) { if (device.GuardZones.Count > 0 || (device.IsInMPT && !GlobalSettingsHelper.GlobalSettings.ShowMPTsDevices) || (device.ZoneUIDs.Count > 0 && !GlobalSettingsHelper.GlobalSettings.ShowZonesDevices) || (device.Door != null && !GlobalSettingsHelper.GlobalSettings.ShowDoorsDevices)) continue; var guardZoneDevice = new GKGuardZoneDevice { DeviceUID = device.UID, Device = device }; var deviceViewModel = new GuardZoneDeviceViewModel(guardZoneDevice); AvailableDevices.Add(deviceViewModel); } } OnPropertyChanged(() => AvailableDevices); SelectedAvailableDevice = AvailableDevices.FirstOrDefault(); }
public static GKDevice CopyDevice(GKDevice deviceFrom, GKDevice deviceTo) { deviceTo.DriverUID = deviceFrom.DriverUID; deviceTo.Driver = deviceFrom.Driver; deviceTo.IntAddress = deviceFrom.IntAddress; deviceTo.Description = deviceFrom.Description; deviceTo.ProjectAddress = deviceFrom.ProjectAddress; deviceTo.PredefinedName = deviceFrom.PredefinedName; deviceTo.InputDependentElements = deviceFrom.InputDependentElements; deviceTo.OutputDependentElements = deviceFrom.OutputDependentElements; deviceTo.Properties = new List<GKProperty>(); foreach (var property in deviceFrom.Properties) { deviceTo.Properties.Add(new GKProperty() { Name = property.Name, Value = property.Value, DriverProperty = property.DriverProperty, StringValue = property.StringValue, }); } deviceTo.ZoneUIDs = deviceFrom.ZoneUIDs.ToList(); deviceTo.Logic.OnClausesGroup = deviceFrom.Logic.OnClausesGroup.Clone(); deviceTo.Logic.OffClausesGroup = deviceFrom.Logic.OffClausesGroup.Clone(); deviceTo.Logic.StopClausesGroup = deviceFrom.Logic.StopClausesGroup.Clone(); deviceTo.Logic.OnNowClausesGroup = deviceFrom.Logic.OnNowClausesGroup.Clone(); deviceTo.Logic.OffNowClausesGroup = deviceFrom.Logic.OffNowClausesGroup.Clone(); deviceTo.Children = new List<GKDevice>(); foreach (var childDevice in deviceFrom.Children) { var newChildDevice = CopyDevice(childDevice, false, true); newChildDevice.Parent = deviceTo; deviceTo.Children.Add(newChildDevice); } var newGuardZone = new List<GKGuardZone>(); foreach (var zone in deviceFrom.GuardZones) { var guardZoneDevice = zone.GuardZoneDevices.FirstOrDefault(x => x.DeviceUID == deviceFrom.UID); if (guardZoneDevice != null) { var newZone = new GKGuardZone { UID = zone.UID }; var GuardZoneDevice = new GKGuardZoneDevice() { DeviceUID = deviceTo.UID, Device = deviceTo, ActionType = guardZoneDevice.ActionType, CodeReaderSettings = guardZoneDevice.CodeReaderSettings, }; newZone.GuardZoneDevices.Add(GuardZoneDevice); newGuardZone.Add(newZone); } } deviceTo.GuardZones = new List<GKGuardZone>(newGuardZone); return deviceTo; }
public void RemoveDeviceTestGuardZone() { var device = AddDevice(kauDevice11, GKDriverType.RSR2_GuardDetector); var guardZone = new GKGuardZone(); var guardZoneDevice = new GKGuardZoneDevice {Device = device,DeviceUID = device.UID }; GKManager.AddGuardZone(guardZone); #region forzone // проверка добавления устройства в зону GKManager.AddDeviceToGuardZone(guardZone, guardZoneDevice); Assert.IsTrue(device.GuardZones.Contains(guardZone)); Assert.IsTrue(guardZone.GuardZoneDevices.Any(x => x.DeviceUID == device.UID)); Assert.IsTrue(device.InputDependentElements.Contains(guardZone)); Assert.IsTrue(guardZone.OutputDependentElements.Contains(device)); GKManager.RemoveDeviceFromGuardZone(device, guardZone); Assert.IsFalse(guardZone.GuardZoneDevices.Any(x => x.Device.UID == device.UID)); Assert.IsFalse(device.GuardZones.Contains(guardZone)); Assert.IsFalse(device.InputDependentElements.Contains(guardZone)); Assert.IsFalse(guardZone.OutputDependentElements.Contains(device)); #endregion #region fordevice // проверка добавления зоны в устройства GKManager.ChangeDeviceGuardZones(device, new List<GKDeviceGuardZone>() {new GKDeviceGuardZone{GuardZone = guardZone, GuardZoneUID = guardZone.UID}}); Assert.IsTrue(device.GuardZones.Contains(guardZone)); Assert.IsTrue(guardZone.GuardZoneDevices.Any(x => x.DeviceUID == device.UID)); Assert.IsTrue(device.InputDependentElements.Contains(guardZone)); Assert.IsTrue(guardZone.OutputDependentElements.Contains(device)); var guardZone_2 = new GKGuardZone(); GKManager.AddGuardZone(guardZone_2); GKManager.ChangeDeviceGuardZones(device, new List<GKDeviceGuardZone>() { new GKDeviceGuardZone { GuardZone = guardZone_2, GuardZoneUID = guardZone_2.UID }}); Assert.IsTrue(device.GuardZones.Contains(guardZone_2)); Assert.IsTrue(guardZone_2.GuardZoneDevices.Any(x => x.DeviceUID == device.UID)); Assert.IsTrue(device.InputDependentElements.Contains(guardZone_2)); Assert.IsTrue(guardZone_2.OutputDependentElements.Contains(device)); Assert.IsFalse(device.GuardZones.Contains(guardZone)); Assert.IsFalse(guardZone.GuardZoneDevices.Any(x => x.DeviceUID == device.UID)); Assert.IsFalse(device.InputDependentElements.Contains(guardZone)); Assert.IsFalse(guardZone.OutputDependentElements.Contains(device)); #endregion //удалениy зоны GKManager.AddDeviceToGuardZone(guardZone, guardZoneDevice); GKManager.RemoveGuardZone(guardZone); Assert.IsFalse(device.GuardZones.Any(x => x.UID == guardZone.UID)); Assert.IsFalse(device.InputDependentElements.Any(x => x.UID == guardZone.UID)); // удаление устройства GKManager.ChangeDeviceGuardZones(device, new List<GKDeviceGuardZone>() { new GKDeviceGuardZone { GuardZone = guardZone_2, GuardZoneUID = guardZone_2.UID } }); GKManager.RemoveDevice(device); Assert.IsFalse(guardZone_2.GuardZoneDevices.Any(x => x.DeviceUID == device.UID)); Assert.IsFalse(guardZone_2.OutputDependentElements.Any(x => x.UID == device.UID)); }
public static void AddDeviceToGuardZone(GKGuardZone guardZone, GKGuardZoneDevice guardZoneDevice) { var device = guardZoneDevice.Device; guardZone.GuardZoneDevices.Add(guardZoneDevice); if (!device.GuardZones.Contains(guardZone)) device.GuardZones.Add(guardZone); if (!device.InputDependentElements.Contains(guardZone)) device.InputDependentElements.Add(guardZone); if (!guardZone.OutputDependentElements.Contains(device)) guardZone.OutputDependentElements.Add(device); guardZone.OnChanged(); device.OnChanged(); }
public void TestGuardZoneInMultiGk() { var device1 = AddDevice(kauDevice11, GKDriverType.RSR2_GuardDetector); var device2 = AddDevice(kauDevice21, GKDriverType.RSR2_GuardDetector); var guardZoneDevice1 = new GKGuardZoneDevice {Device = device1, DeviceUID = device1.UID}; var guardZoneDevice2 = new GKGuardZoneDevice {Device = device2, DeviceUID = device2.UID}; var guardZone = new GKGuardZone(); GKManager.GuardZones.Add(guardZone); guardZone.GuardZoneDevices.Add(guardZoneDevice1); guardZone.GuardZoneDevices.Add(guardZoneDevice2); GKManager.AddDeviceToGuardZone(guardZone, guardZoneDevice1); GKManager.AddDeviceToGuardZone(guardZone, guardZoneDevice2); var validator = new Validator(); var errors = validator.Validate(); Assert.IsTrue(errors.Any(x => x.ErrorLevel == ValidationErrorLevel.CannotWrite && x.Error == "Содержится в нескольких ГК")); }
//RG-1109 (Валидация настройки контроллера Wiegand при одновременном участии в ТД и в ОЗ) public void TestCardReader() { var rK = AddDevice(kauDevice11, GKDriverType.RK_RM); var cardReader = AddDevice(kauDevice11, GKDriverType.RSR2_CardReader); var codeReader = AddDevice(kauDevice11, GKDriverType.RSR2_CodeReader); var lockDevice = new GKGuardZoneDevice { DeviceUID = codeReader.UID, Device = codeReader }; var enterDevice = new GKGuardZoneDevice { DeviceUID = cardReader.UID, Device = cardReader }; var zone = new GKGuardZone { No = 1, Name = "Охранная зона" }; var door = new GKDoor { No = 1, Name = "Точка доступа", DoorType = GKDoorType.TwoWay, EnterDevice = cardReader, EnterDeviceUID = cardReader.UID, ExitDevice = codeReader, ExitDeviceUID = codeReader.UID, LockDevice = rK, LockDeviceUID = codeReader.UID }; GKManager.AddGuardZone(zone); GKManager.AddDeviceToGuardZone(zone, lockDevice); GKManager.AddDeviceToGuardZone(zone, enterDevice); GKManager.AddDoor(door); enterDevice.CodeReaderSettings.SetGuardSettings = new GKCodeReaderSettingsPart { CodeReaderEnterType = GKCodeReaderEnterType.CodeOnly }; var errors = Validate(); Assert.IsTrue(errors.Any(x => x.ErrorLevel == ValidationErrorLevel.CannotWrite && x.Error == "Котроллер Wiegand используется в точке доступа, не должно быть настроенных кодов с методом ввода *КОД# ")); }
public static void ChangeDeviceGuardZones(GKDevice device, List<GKDeviceGuardZone> deviceGuardZones) { foreach (var guardZone in device.GuardZones) { guardZone.GuardZoneDevices.RemoveAll(x => x.Device == device); guardZone.OnChanged(); } device.GuardZones.Clear(); foreach (var deviceGuardZone in deviceGuardZones) { device.GuardZones.Add(deviceGuardZone.GuardZone); var gkGuardZoneDevice = new GKGuardZoneDevice(); gkGuardZoneDevice.Device = device; gkGuardZoneDevice.DeviceUID = device.UID; if (deviceGuardZone.ActionType != null) gkGuardZoneDevice.ActionType = deviceGuardZone.ActionType.Value; gkGuardZoneDevice.CodeReaderSettings = deviceGuardZone.CodeReaderSettings; deviceGuardZone.GuardZone.GuardZoneDevices.Add(gkGuardZoneDevice); deviceGuardZone.GuardZone.OnChanged(); } device.ChangedLogic(); device.OnChanged(); }
public void TestGuardZone() { var cardReaderDevice = AddDevice(kauDevice, GKDriverType.RSR2_CardReader); var guardZoneDevice = new GKGuardZoneDevice(); guardZoneDevice.Device = cardReaderDevice; guardZoneDevice.DeviceUID = cardReaderDevice.UID; guardZoneDevice.CodeReaderSettings = new GKCodeReaderSettings(); guardZoneDevice.CodeReaderSettings.ChangeGuardSettings = new GKCodeReaderSettingsPart(); var code = new GKCode(); GKManager.DeviceConfiguration.Codes.Add(code); guardZoneDevice.CodeReaderSettings.ChangeGuardSettings.CodeUIDs.Add(code.UID); guardZoneDevice.ActionType = GKGuardZoneDeviceActionType.ChangeGuard; guardZoneDevice.CodeReaderSettings.ChangeGuardSettings.CodeReaderEnterType = GKCodeReaderEnterType.CodeAndOne; var guardZone = new GKGuardZone(); GKManager.AddGuardZone(guardZone); GKManager.AddDeviceToGuardZone(guardZone, guardZoneDevice); Test(guardZone, GKDriverType.GuardZonesMirror); CheckObjectOnGK(code); Assert.IsNotNull(guardZone.Pim); CheckObjectOnGK(guardZone.Pim); }
/// <summary> /// Если в охранноую зону входит контроллер Wiegand или кодонаборник, а у кодонаборника указан только код и не указан уровень, то такая зона и само устройство /// должны попасть на КАУ /// </summary> void TestGuardZoneWithCodesOnKau(GKDriverType driverType) { var device1 = AddDevice(kauDevice1, GKDriverType.RSR2_CodeReader); var code = new GKCode(); GKManager.DeviceConfiguration.Codes.Add(code); var guardZone = new GKGuardZone(); var guardZoneDevice = new GKGuardZoneDevice { DeviceUID = device1.UID, CodeReaderSettings = new GKCodeReaderSettings { SetGuardSettings = new GKCodeReaderSettingsPart {CodeReaderEnterType = GKCodeReaderEnterType.CodeAndOne, CodeUIDs = {code.UID}} } }; GKManager.AddDeviceToGuardZone(guardZone, guardZoneDevice); GKManager.GuardZones.Add(guardZone); Compile(); CheckObjectLogicOnKau(guardZone); }