static Tuple<ImitatorUser, bool> GetUserAccess(uint currentCardNo, FormulaOperation formulaOperation, DescriptorViewModel descriptorViewModel)
		{
			var isAccess = false;
			var level = formulaOperation.FirstOperand;
			ImitatorUser user = null;
			var device = descriptorViewModel.GKBase as GKDevice;
			if (device != null && (device.Driver.IsCardReaderOrCodeReader))
			{
				using (var dbService = new DbService())
				{
					user = dbService.ImitatorUserTraslator.GetByNo(currentCardNo);
					if (user != null)
					{
						if (user.Level >= level)
						{
							if (IsInSchedule(dbService, user.ScheduleNo))
								isAccess = true;
						}
						foreach (var imitatorUserDevice in user.ImitatorUserDevices)
						{
							if (imitatorUserDevice.DescriptorNo == formulaOperation.SecondOperand)
							{
								if (IsInSchedule(dbService, imitatorUserDevice.ScheduleNo))
									isAccess = true;
							}
						}
					}
				}
			}
			return new Tuple<ImitatorUser, bool>(user, isAccess);
		}
示例#2
0
		public DescriptorLogicItem(FormulaOperation formulaOperation, DescriptorsViewModel descriptorsViewModel, BaseDescriptor descriptor)
		{
			FormulaOperation = formulaOperation;
			DescriptorsViewModel = descriptorsViewModel;
			FirstOperand = FormulaOperation.FirstOperand.ToString();
			FirstOperandByte = FormulaOperation.FirstOperand;
			SecondOperand = FormulaOperation.SecondOperand.ToString();
			Descriptor = descriptor;

			switch (FormulaOperation.FormulaOperationType)
			{
				case FormulaOperationType.ADD:
				case FormulaOperationType.AND:
				case FormulaOperationType.COM:
				case FormulaOperationType.DUP:
				case FormulaOperationType.END:
				case FormulaOperationType.EQ:
				case FormulaOperationType.GE:
				case FormulaOperationType.GT:
				case FormulaOperationType.LE:
				case FormulaOperationType.LT:
				case FormulaOperationType.MUL:
				case FormulaOperationType.NE:
				case FormulaOperationType.NEG:
				case FormulaOperationType.OR:
				case FormulaOperationType.SUB:
				case FormulaOperationType.XOR:
				case FormulaOperationType.EXIT:
				case FormulaOperationType.PUTP:
					FirstOperand = "";
					SecondOperand = "";
					break;

				case FormulaOperationType.CONST:
				case FormulaOperationType.TSTP:
					FirstOperand = "";
					break;

				case FormulaOperationType.PUTMEMB:
				case FormulaOperationType.GETMEMB:
					FirstOperand = "";
					var descriptorViewModel = DescriptorsViewModel.Descriptors.FirstOrDefault(x => ((x.Descriptor.DatabaseType == GKProcessor.DatabaseType.Gk && x.Descriptor.GKBase.GKDescriptorNo == FormulaOperation.SecondOperand) || (x.Descriptor.DatabaseType == GKProcessor.DatabaseType.Kau && x.Descriptor.GKBase.KAUDescriptorNo == FormulaOperation.SecondOperand)));
					if (descriptorViewModel != null)
					{
						DescriptorIcon = descriptorViewModel.ImageSource;
						SecondOperand = descriptorViewModel.Descriptor.GKBase.PresentationName;
					}
					else
					{
						SecondOperand = "<Не найдено в конфигурации>";
						Error = "Отсутствует ссылка на объект логики";
					}
					break;

				case FormulaOperationType.BR:
					break;

				case FormulaOperationType.GETWORD:
				case FormulaOperationType.PUTWORD:
					FirstOperand = FormulaOperation.FirstOperand == 1 ? "старшее слово" : "младшее слово";
					descriptorViewModel = DescriptorsViewModel.Descriptors.FirstOrDefault(x => ((x.Descriptor.DatabaseType == GKProcessor.DatabaseType.Gk && x.Descriptor.GKBase.GKDescriptorNo == FormulaOperation.SecondOperand) || (x.Descriptor.DatabaseType == GKProcessor.DatabaseType.Kau && x.Descriptor.GKBase.KAUDescriptorNo == FormulaOperation.SecondOperand)));
					if (descriptorViewModel != null)
					{
						DescriptorIcon = descriptorViewModel.ImageSource;
						SecondOperand = descriptorViewModel.Descriptor.GKBase.PresentationName;
					}
					else
					{
						SecondOperand = "<Не найдено в конфигурации>";
						Error = "Отсутствует ссылка на объект логики";
					}
					break;

				default:
					IsBold = true;

					var stateTypeToIconConverter = new XStateTypeToIconConverter();
					StateIcon = (string)stateTypeToIconConverter.Convert((GKStateBit)FormulaOperation.FirstOperand, null, null, null);

					var stateTypeToStringConverter = new EnumToDescriptionConverter();
					FirstOperand = (string)stateTypeToStringConverter.Convert((GKStateBit)FormulaOperation.FirstOperand, null, null, null);

					descriptorViewModel = DescriptorsViewModel.Descriptors.FirstOrDefault(x => ((x.Descriptor.DatabaseType == GKProcessor.DatabaseType.Gk && x.Descriptor.GKBase.GKDescriptorNo == FormulaOperation.SecondOperand) || (x.Descriptor.DatabaseType == GKProcessor.DatabaseType.Kau && x.Descriptor.GKBase.KAUDescriptorNo == FormulaOperation.SecondOperand)));
					if (descriptorViewModel != null)
					{
						DescriptorIcon = descriptorViewModel.ImageSource;
						SecondOperand = descriptorViewModel.Descriptor.GKBase.PresentationName;
					}
					else
					{
						SecondOperand = "<Не найдено в конфигурации>";
						Error = "Отсутствует ссылка на объект логики";
					}
					break;
			}

			if (FormulaOperation.FormulaOperationType == FormulaOperationType.KOD)
			{
				StateIcon = null;
				FirstOperand = "";
			}
			if (FormulaOperation.FormulaOperationType == FormulaOperationType.CMPKOD)
			{
				StateIcon = null;
				if (FormulaOperation.FirstOperand == 1)
					FirstOperand = "Если равно";
				if (FormulaOperation.FirstOperand == 2)
					FirstOperand = "Если не равно";
			}
			if (FormulaOperation.FormulaOperationType == FormulaOperationType.ACS)
			{
				FirstOperand = FormulaOperation.FirstOperand.ToString();
			}
			if (FormulaOperation.FormulaOperationType == FormulaOperationType.ACSP)
			{
				FirstOperand = FormulaOperation.FirstOperand.ToString();
			}
			if (FormulaOperation.FormulaOperationType == FormulaOperationType.BR)
			{
				StateIcon = null;
				DescriptorIcon = null;
				switch(FormulaOperation.FirstOperand)
				{
					case 0:
						FirstOperand = "Безусловный переход";
						break;

					case 1:
						FirstOperand = "Переход, если в стеке 0";
						break;

					case 2:
						FirstOperand = "Переход, если в стеке не 0";
						break;
				}
				SecondOperand = FormulaOperation.SecondOperand.ToString();
			}
		}