/// <summary>
		/// Creates an instance of FilterBoxVmCollection to be used as a collection of guilty operators
		/// </summary>
		/// <param name="models">collection of ODR or OSR models which represent guilty operators</param>
		/// <returns></returns>
		public static FilterBoxVmCollection CreateForGuiltyOperators(dynamic models, Dal.SoheilEdmContext uow)
		{
			//find all active operators
			var operatorDs = new DataServices.OperatorDataService(uow);
			var operatorModels = operatorDs.GetActives();
			
			//create vm for all active operators
			var operatorVms = new FilterableItemVm[operatorModels.Count];
			for (int i = 0; i < operatorVms.Length; i++)
			{
				operatorVms[i] = FilterableItemVm.CreateForGuiltyOperator(operatorModels[i]);
			}

			//initiate this vm to auto-add operatorVms when a new FilterBoxVm is added to it
			var vm = new FilterBoxVmCollection();
			vm.AddCommand = new Commands.Command(o => vm.AddOperator(operatorVms));

			//add new FilterBoxVm for each of guilty operators and select the guilty operator in it
			if (models != null)
			{
				foreach (var model in models)
				{
					vm.AddOperator(operatorVms, model);
				}
			}

			return vm;
		}
		/// <summary>
		/// Creates an instance of FilterBoxVmCollection to be used as a collection of stoppage reports (cause)
		/// </summary>
		/// <param name="parent">Instance of <see cref="StoppageReportVm"/> that has this collection</param>
		/// <param name="selectedIds">default cause Ids (must be like: {level1Id, level2Id, level3Id})</param>
		/// <returns></returns>
		public static FilterBoxVmCollection CreateForStoppageReport(Report.StoppageReportVm parent, int[] selectedIds)
		{
			var vm = new FilterBoxVmCollection();

			//find causes and create FilterBoxVm instances for each level
			var causeDs = new DataServices.CauseDataService();
			var causeL1Models = causeDs.GetRoot().Children.Where(x => x.Status == (byte)Common.Status.Active).ToArray();
			var causeL3Box = FilterBoxVm.CreateForCause(null);
			var causeL2Box = FilterBoxVm.CreateForCause(causeL3Box);
			var causeL1Box = FilterBoxVm.CreateForCause(causeL2Box, causeL1Models);

			//set the event handlers
			causeL3Box.FilterableItemSelected += (s, old, v) =>
			{
				string code = string.Empty;
				if (causeL1Box.SelectedItem != null)
				{
					code = ((CauseVm)causeL1Box.SelectedItem.ViewModel).Code;
					if (causeL2Box.SelectedItem != null)
					{
						code += ((CauseVm)causeL2Box.SelectedItem.ViewModel).Code;
						if (v != null) 
							code += ((CauseVm)v.ViewModel).Code;
					}
				}
				parent.SelectedCode =  code;
				parent.SelectCause(v.Id);
			};
			causeL2Box.FilterableItemSelected += (s, old, v) =>
			{
				string code = string.Empty;
				if (causeL1Box.SelectedItem != null)
				{
					code = ((CauseVm)causeL1Box.SelectedItem.ViewModel).Code;
					if (v != null)
						code += ((CauseVm)v.ViewModel).Code;
				}
				parent.SelectedCode = code;

				causeL3Box.FilteredList.Clear();
				if (v == null) return;
				foreach (var item in ((CauseVm)v.ViewModel).ChildrenModels.Where(x => x.Status == (byte)Common.Status.Active))
				{
					causeL3Box.FilteredList.Add(FilterableItemVm.CreateForCause(causeL3Box, item));
				}
			};
			causeL1Box.FilterableItemSelected += (s, old, v) =>
			{
				if (v != null)
					parent.SelectedCode = ((CauseVm)v.ViewModel).Code;

				causeL2Box.FilteredList.Clear();
				if (v == null) return;
				foreach (var item in ((CauseVm)v.ViewModel).ChildrenModels.Where(x => x.Status == (byte)Common.Status.Active))
				{
					causeL2Box.FilteredList.Add(FilterableItemVm.CreateForCause(causeL2Box, item));
				}
			};

			//add filterboxes to the collection
			vm.FilterBoxes.Add(causeL1Box);
			vm.FilterBoxes.Add(causeL2Box);
			vm.FilterBoxes.Add(causeL3Box);

			//select the default cause
			try
			{
				if (selectedIds != null)
				{

					causeL1Box.SelectedItem = causeL1Box.FilteredList.FirstOrDefault(x => x.Id == selectedIds[0]);
					causeL2Box.SelectedItem = causeL2Box.FilteredList.FirstOrDefault(x => x.Id == selectedIds[1]);
					causeL3Box.SelectedItem = causeL3Box.FilteredList.FirstOrDefault(x => x.Id == selectedIds[2]);
				}
				else
				{
					causeL1Box.SelectedItem = causeL1Box.FilteredList.FirstOrDefault();
					causeL2Box.SelectedItem = causeL2Box.FilteredList.FirstOrDefault();
					causeL3Box.SelectedItem = causeL3Box.FilteredList.FirstOrDefault();
				}
			}
			catch { }

			vm.AddCommand = new Commands.Command(o => { });
			return vm;
		}
Example #3
0
		/// <summary>
		/// Creates an instance of FilterBoxVm to be used as a collection of operators
		/// </summary>
		/// <param name="parent">collection of FilterBoxVm that this vm is a part of</param>
		/// <param name="selectedId">Id of defection that is selected by default</param>
		/// <param name="list">array of FilterableItemVm instances as children of this vm</param>
		/// <returns></returns>
		public static FilterBoxVm CreateForGuiltyOperators(FilterBoxVmCollection parent, int selectedId, FilterableItemVm[] list)
		{
			var vm = new FilterBoxVm();
			vm._parent = parent;
			foreach (var item in list)
			{
				item.Parent = vm;
				vm.FilteredList.Add(item);
			}

			//select the default operator
			vm.SelectedItem = vm.FilteredList.FirstOrDefault(x => x.Id == selectedId);
			return vm;
		}