Example #1
0
		internal static OeeRecord CreateUnreportedFrom(OeeRecord data)
		{
			var newData = new OeeRecord();
			newData.TimeRange = data.TimeRange;

			newData.TotalHours = data.TotalHours - data.UnreportedTime;
			newData.MainScheduledTime = data.MainScheduledTime - data.UnreportedTime;
			newData.ReworkScheduledTime = data.ReworkScheduledTime;
			newData.StoppageTime = data.StoppageTime;
			newData.IdleTime = data.IdleTime;
			newData.ProductionTime = data.ProductionTime;
			newData.DefectionTime = data.DefectionTime;

			return newData;
		}
Example #2
0
		public void FillPPMByMachine(OeeRecord record, bool isByProduct)
		{
			using (var context = new SoheilEdmContext())
			{
				var selectedMachineRepository = new Repository<SelectedMachine>(context);
				var processRepository = new Repository<Process>(context);
				var processReportRepository = new Repository<ProcessReport>(context);
				var causeRepository = new Repository<Cause>(context);

				var selectedMachineList = selectedMachineRepository.GetAll();
				var processReportList = processReportRepository.GetAll();
				var causeList = causeRepository.GetAll();


				var prQuery = from selmachine in selectedMachineList.Where(x =>
								x.StateStationActivityMachine != null &&
								x.StateStationActivityMachine.Machine.Id == record.MachineId &&
								x.Process != null &&
								x.Process.StateStationActivity != null &&
								x.Process.StartDateTime < record.End &&
								x.Process.EndDateTime > record.Start)
							  from processReport in processReportList.Where(pr =>
								  selmachine.Process != null &&
								  pr.Process != null &&
								  pr.Process.Id == selmachine.Process.Id &&
								  pr.StartDateTime < record.End &&
								  pr.EndDateTime > record.Start)
							  from stpr in processReport.DefectionReports
							  let start = (processReport.StartDateTime < record.Start) ? record.Start : processReport.StartDateTime
							  let end = (processReport.EndDateTime > record.End) ? record.End : processReport.EndDateTime
							  let hours = (end - start).TotalHours
							  let ratio = hours / processReport.DurationSeconds
							  let cycleTime = processReport.Process.StateStationActivity.CycleTime
							  select new
							  {
								  productDefection = stpr.ProductDefection,

								  //stoppage hours
								  h = (stpr.LostTime + stpr.LostCount * cycleTime) * ratio,
							  };

				//ppm by product
				if (isByProduct)
				{
					var s1Query = from stoppageReport in prQuery
								  group stoppageReport by stoppageReport.productDefection.Product into prodGroup
								  let h = prodGroup.Sum(x => x.h)
								  orderby h descending
								  select new
								  {
									  h,
									  txt = prodGroup.Key.Name,
									  g = prodGroup,
									  id = prodGroup.Key.Id
								  };


					double total1 = s1Query.Sum(x => x.h);
					foreach (var rowC1 in s1Query)
					{
						var detail1 = new OeeRecordDetail
						{
							ParentHours = total1,
							Hours = rowC1.h,
							Text = rowC1.txt,
							Id = rowC1.id
						};
						record.DefectionDetails.Add(detail1);


						var s2Query = from stpr in prQuery
									  where stpr.productDefection.Product == rowC1.g.Key
									  group stpr by stpr.productDefection.Defection into defGroup
									  let h = defGroup.Sum(x => x.h)
									  orderby h descending
									  select new
									  {
										  h,
										  txt = defGroup.Key.Name,
										  g = defGroup,
										  id = defGroup.Key.Id
									  };
						double total2 = s2Query.Sum(x => x.h);
						foreach (var rowC2 in s2Query)
						{
							var detail2 = new OeeRecordDetail
							{
								ParentHours = total2,
								Hours = rowC2.h,
								Text = rowC2.txt,
								Id = rowC2.id,
								ParentId = rowC1.id
							};
							detail1.SubRecords.Add(detail2);
						}
					}
				}
				//ppm by defection
				else
				{
					var s1Query = from stoppageReport in prQuery
								  group stoppageReport by stoppageReport.productDefection.Defection into defGroup
								  let h = defGroup.Sum(x => x.h)
								  orderby h descending
								  select new
								  {
									  h,
									  txt = defGroup.Key.Name,
									  g = defGroup,
									  id = defGroup.Key.Id
								  };


					double total1 = s1Query.Sum(x => x.h);
					foreach (var rowC1 in s1Query)
					{
						var detail1 = new OeeRecordDetail
						{
							ParentHours = total1,
							Hours = rowC1.h,
							Text = rowC1.txt,
							Id = rowC1.id
						};
						record.DefectionDetails.Add(detail1);


						var s2Query = from stpr in prQuery
									  where stpr.productDefection.Defection == rowC1.g.Key
									  group stpr by stpr.productDefection.Product into prodGroup
									  let h = prodGroup.Sum(x => x.h)
									  orderby h descending
									  select new
									  {
										  h,
										  txt = prodGroup.Key.Name,
										  g = prodGroup,
										  id = prodGroup.Key.Id
									  };
						double total2 = s2Query.Sum(x => x.h);
						foreach (var rowC2 in s2Query)
						{
							var detail2 = new OeeRecordDetail
							{
								ParentHours = total2,
								Hours = rowC2.h,
								Text = rowC2.txt,
								Id = rowC2.id,
								ParentId = rowC1.id
							};
							detail1.SubRecords.Add(detail2);
						}
					}
				}


			}
		}
Example #3
0
		public void FillOEEStoppageByMachine(OeeRecord record)
		{
			using (var context = new SoheilEdmContext())
			{
				var selectedMachineRepository = new Repository<SelectedMachine>(context);
				var processRepository = new Repository<Process>(context);
				var processReportRepository = new Repository<ProcessReport>(context);
				var causeRepository = new Repository<Cause>(context);

				var selectedMachineList = selectedMachineRepository.GetAll();
				var processReportList = processReportRepository.GetAll();
				var causeList = causeRepository.GetAll();

				var prQuery = from selmachine in selectedMachineList.Where(x =>
								x.StateStationActivityMachine != null &&
								x.StateStationActivityMachine.Machine.Id == record.MachineId &&
								x.Process != null &&
								x.Process.StateStationActivity != null &&
								x.Process.StartDateTime < record.End &&
								x.Process.EndDateTime > record.Start)
							  from processReport in processReportList.Where(pr =>
								  selmachine.Process != null &&
								  pr.Process != null &&
								  pr.Process.Id == selmachine.Process.Id &&
								  pr.StartDateTime < record.End &&
								  pr.EndDateTime > record.Start)
							  from stpr in processReport.StoppageReports
							  let start = (processReport.StartDateTime < record.Start) ? record.Start : processReport.StartDateTime
							  let end = (processReport.EndDateTime > record.End) ? record.End : processReport.EndDateTime
							  let hours = (end - start).TotalHours
							  let ratio = hours / processReport.DurationSeconds
							  let cycleTime = processReport.Process.StateStationActivity.CycleTime
							  select new
							  {
								  PrId = processReport.Id,
								  l3 = stpr.Cause,
								  l2 = stpr.Cause.Parent,
								  l1 = stpr.Cause.Parent.Parent,

								  //stoppage hours
								  h = (stpr.LostTime + stpr.LostCount * cycleTime) * ratio,
							  };

				var s1Query = from stpr in prQuery
							  group stpr by stpr.l1 into g1
							  let h = g1.Sum(x => x.h)
							  orderby h descending
							  select new
							  {
								  h,
								  txt = g1.Key.Name,
								  g = g1,
							  };


				double total1 = s1Query.Sum(x => x.h);
				foreach (var rowC1 in s1Query)
				{
					var detail1 = new OeeRecordDetail
					{
						ParentHours = total1,
						Hours = rowC1.h,
						Text = rowC1.txt,
						Id = rowC1.g.Key.Id
					};
					record.StoppageDetails.Add(detail1);


					var s2Query = from stpr in prQuery
								  where stpr.l1 == rowC1.g.Key
								  group stpr by stpr.l2 into g2
								  let h = g2.Sum(x => x.h)
								  orderby h descending
								  select new
								  {
									  h,
									  txt = g2.Key.Name,
									  g = g2
								  };
					double total2 = s2Query.Sum(x => x.h);
					foreach (var rowC2 in s2Query)
					{
						var detail2 = new OeeRecordDetail
						{
							ParentHours = total2,
							Hours = rowC2.h,
							Text = rowC2.g.Key.Name,
							Id = rowC2.g.Key.Id,
							ParentId = rowC1.g.Key.Id
						};
						detail1.SubRecords.Add(detail2);

						var s3Query = from stpr in prQuery
									  where stpr.l2 == rowC2.g.Key
									  group stpr by stpr.l3 into g3
									  let h = g3.Sum(x => x.h)
									  orderby h descending
									  select new
									  {
										  h,
										  txt = g3.Key.Name,
										  g = g3
									  };
						double total3 = s3Query.Sum(x => x.h);

						foreach (var rowC3 in s3Query)
						{
							var detail3 = new OeeRecordDetail
							{
								ParentHours = total3,
								Hours = rowC3.h,
								Text = rowC3.g.Key.Name,
								Id = rowC3.g.Key.Id,
								ParentId = rowC2.g.Key.Id
							};
							detail2.SubRecords.Add(detail3);
						}
					}
				}
			}
		}
Example #4
0
		public void FillOEEByMachine(OeeRecord record)
		{
			using (var context = new SoheilEdmContext())
			{
				var selectedMachineRepository = new Repository<SelectedMachine>(context);
				var processRepository = new Repository<Process>(context);
				var processReportRepository = new Repository<ProcessReport>(context);

				var selectedMachineList = selectedMachineRepository.GetAll();
				var processReportList = processReportRepository.GetAll();

				var pQuery = from selmachine in selectedMachineList.Where(x =>
								x.StateStationActivityMachine != null &&
								x.StateStationActivityMachine.Machine.Id == record.MachineId &&
								x.Process != null &&
								x.Process.StateStationActivity != null &&
								x.Process.StartDateTime < record.End &&
								x.Process.EndDateTime > record.Start)
							 let process = selmachine.Process
							 let start = (process.StartDateTime < record.Start) ? record.Start : process.StartDateTime
							 let end = (process.EndDateTime > record.End) ? record.End : process.EndDateTime
							 select new
							 {
								 model = process,
								 rew = process.StateStationActivity.StateStation.State.OnProductRework.Rework,
								 start,
								 end,
								 cycleTime = process.StateStationActivity.CycleTime
							 };

				record.MainScheduledTime = pQuery.Where(x => x.rew == null).Sum(x => (x.end - x.start).TotalHours);
				record.ReworkScheduledTime = pQuery.Where(x => x.rew != null).Sum(x => (x.end - x.start).TotalHours);

				var prQuery = from process in pQuery
							  from processReport in processReportList.Where(pr =>
								  process != null &&
								  pr.Process != null &&
								  pr.Process.Id == process.model.Id &&
								  pr.StartDateTime < record.End &&
								  pr.EndDateTime > record.Start
								  )
							  let start = (processReport.StartDateTime < record.Start) ? record.Start : processReport.StartDateTime
							  let end = (processReport.EndDateTime > record.End) ? record.End : processReport.EndDateTime
							  let hours = (end - start).TotalHours
							  let ratio = hours / processReport.DurationSeconds
							  select new
							  {
								  PrId = processReport.Id,
								  model = processReport,

								  //reported hours
								  hours,

								  //stoppage hours
								  sr = (processReport.StoppageReports.Sum(x => x.LostTime) +
								  processReport.StoppageReports.Sum(x => x.LostCount) * process.cycleTime)
								  * ratio,

								  //defection hours
								  dr = (processReport.DefectionReports.Sum(x => x.LostTime) +
								  processReport.DefectionReports.Sum(x => x.LostCount) * process.cycleTime)
								  * ratio,

								  //produced g1 hours
								  g1 = processReport.ProducedG1 * process.cycleTime
								  * ratio,
							  };

				record.ProductionTime = prQuery.Sum(x => x.g1);
				record.IdleTime = prQuery.Sum(x => x.hours - x.g1 - x.dr - x.sr);
				record.DefectionTime = prQuery.Sum(x => x.dr);
				record.StoppageTime = prQuery.Sum(x => x.sr);
			}
		}
Example #5
0
		/// <summary>
		/// View calls this method to load its index infromation from database
		/// </summary>
		public void Load(OeeType ot)
		{
			Timeline.Clear();
			var dt = DateTime.Now.GetNorooz();
			switch (ot.Interval)
			{
				case OeeType.OeeInterval.Monthly:
					dt = dt.AddDays(ot.MonthStart - 1);
					int months = (int)DateTime.Now.GetPersianMonth();
					for (int i = 0; i < months; i++)
					{
						var vm = new OeeMachineDetailVm();
						vm.Selected += () =>
						{
							if (SelectedDetail != null)
								SelectedDetail.IsSelected = false;
							SelectedDetail = vm;
						};
						Timeline.Add(vm);

						//load data
						var start = dt;
						if (i == months - 1)
						{
							dt = DateTime.Now;
						}
						else
						{
							dt = dt.AddDays(dt.GetPersianMonthDays());
						}
						var end = dt;

						var data = new OeeRecord(Model.Id, start, end);
						data.TimeRange = start.GetPersianMonth().ToString();
						_data.Add(data);
						vm.Load(data);
					}
					break;
				case OeeType.OeeInterval.Weekly:
					dt = dt.AddDays(-(int)dt.GetPersianDayOfWeek());
					int weeks = DateTime.Now.GetPersianWeekOfYear() + 2;
					for (int i = 0; i < weeks; i++)
					{
						var vm = new OeeMachineDetailVm();
						vm.Selected += () =>
						{
							if (SelectedDetail != null)
								SelectedDetail.IsSelected = false;
							SelectedDetail = vm;
						};
						Timeline.Add(vm);

						//load data
						var start = dt;
						if (i == weeks - 1)
						{
							dt = DateTime.Now;
						}
						else
						{
							dt = dt.AddDays(7);
						}
						var end = dt;

						var data = new OeeRecord(Model.Id, start, end);
						data.TimeRange = string.Format("از {0} الی {1}", start.ToPersianDateString(), end.ToPersianDateString());
						_data.Add(data);
						vm.Load(data);
					}
					break;
				case OeeType.OeeInterval.Daily:
					dt = dt.Add(ot.DayStart);
					int days = DateTime.Now.GetPersianDayOfYear();
					for (int i = 0; i < days; i++)
					{
						var vm = new OeeMachineDetailVm();
						vm.Selected += () =>
						{
							if (SelectedDetail != null)
								SelectedDetail.IsSelected = false;
							SelectedDetail = vm;
						};
						Timeline.Add(vm);

						//load data
						var start = dt;
						if (i == days - 1)
						{
							dt = DateTime.Now;
						}
						else
						{
							dt = dt.AddDays(1);
						}
						var end = dt;

						var data = new OeeRecord(Model.Id, start, end);
						data.TimeRange = start.ToPersianCompactDateString();
						_data.Add(data);
						vm.Load(data);
					}
					break;
				default:
					break;
			}


			if (Timeline.Any()) Timeline.LastOrDefault().SelectCommand.Execute();
		}
Example #6
0
		private void refresh(OeeRecord data)
		{
			TimeText = data.TimeRange;
			OEE = data.OEE;
			AvailabilityRate = data.AvailabilityRate;
			EfficiencyRate = data.EfficiencyRate;
			SchedulingRate = data.SchedulingRate;
			QualityRate = data.QualityRate;

			ScheduledTime = new IndexTime(data.MainScheduledTime, data.TotalHours);
			ReworkTime = new IndexTime(data.ReworkScheduledTime, data.TotalHours);
			UnscheduledTime = new IndexTime(data.TotalHours - data.ScheduledTime, data.TotalHours);
			AvailableTime = new IndexTime(data.AvailableTime, data.TotalHours);
			StoppageTime = new IndexTime(data.StoppageTime, data.TotalHours);
			WorkingTime = new IndexTime(data.WorkingTime, data.TotalHours);
			UnreportedTime = new IndexTime(data.UnreportedTime, data.TotalHours);
			IdleTime = new IndexTime(data.IdleTime, data.TotalHours);
			UnsStpTime = new IndexTime(data.UnscheduledTime + data.StoppageTime, data.TotalHours);
			ProductionTime = new IndexTime(data.ProductionTime, data.TotalHours);
			DefectionTime = new IndexTime(data.DefectionTime, data.TotalHours);
			LostTime = new IndexTime(data.TotalHours - data.WorkingTime, data.TotalHours);

			//commands
			DefectionTime.Selected += item =>
			{
				data.LoadDefectionDetails(item.IsByProduct);
				this.DefectionTime.SubItems.Clear();
				foreach (var l1 in data.DefectionDetails)
				{
					var vm1 = new IndexTime(l1.Hours, l1.ParentHours, l1.Text);
					vm1.Selected += i => DefectionTime.CurrentItem = vm1;
					foreach (var l2 in l1.SubRecords)
					{
						var vm2 = new IndexTime(l2.Hours, l2.ParentHours, l2.Text);
						vm1.SubItems.Add(vm2);
					}
					this.DefectionTime.SubItems.Add(vm1);
				}
			};
			StoppageTime.Selected += item =>
			{
				data.LoadStoppageDetails();
				this.StoppageTime.SubItems.Clear();
				foreach (var l1 in data.StoppageDetails)
				{
					var vm1 = new IndexTime(l1.Hours, l1.ParentHours, l1.Text);
					vm1.Selected += i => StoppageTime.CurrentItem = vm1;
					foreach (var l2 in l1.SubRecords)
					{
						var vm2 = new IndexTime(l2.Hours, l2.ParentHours, l2.Text);
						vm2.Selected += i =>
						{
							if (StoppageTime.CurrentItem != null)
								StoppageTime.CurrentItem.CurrentItem = vm2;
						};
						foreach (var l3 in l2.SubRecords)
						{
							var vm3 = new IndexTime(l3.Hours, l3.ParentHours, l3.Text);
							//vm3.Selected += i => vm2.CurrentItem = vm3;
							vm2.SubItems.Add(vm3);
						}
						vm1.SubItems.Add(vm2);
					}
					this.StoppageTime.SubItems.Add(vm1);
				}
			};
		}
Example #7
0
		public void Load(OeeRecord data)
		{
			_data = data;
			refresh(data);
		}