예제 #1
0
		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();
		}
예제 #2
0
		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;
		}
예제 #3
0
		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));

		}
예제 #4
0
		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();
		}
예제 #5
0
		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 == "Содержится в нескольких ГК"));
		}
예제 #6
0
		//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 используется в точке доступа, не должно быть настроенных кодов с методом ввода *КОД#   "));
		}
예제 #7
0
		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();
		}
예제 #8
0
		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);
		}
예제 #9
0
		/// <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);
		}