public StoppageReportCollection(ProcessReportVm parent) { Parent = parent; AddCommand = new Commands.Command(o => { var model = new Model.StoppageReport { ProcessReport = parent.Model, LostCount = 0, LostTime = 0, Cause = null, ModifiedBy = LoginInfo.Id, }; foreach (var po in Parent.Model.Process.ProcessOperators) { model.OperatorStoppageReports.Add(new Model.OperatorStoppageReport { Operator = po.Operator, StoppageReport = model, Code = po.Operator.Code, ModifiedBy = LoginInfo.Id, }); } parent.Model.StoppageReports.Add(model); var vm = new StoppageReportVm(this, model); List.Add(vm); }); }
public StoppageReportVm(StoppageReportCollection parent, Model.StoppageReport model) { Model = model; Index = parent.Parent.StoppageReports.List.Count + 1; Parent = parent; int[] causeIds = null; if (model.Cause != null) if (model.Cause.Parent != null) if (model.Cause.Parent.Parent != null) causeIds = new int[3] { model.Cause.Parent.Parent.Id, model.Cause.Parent.Id, model.Cause.Id }; StoppageLevels = FilterBoxVmCollection.CreateForStoppageReport(this, causeIds); GuiltyOperators = FilterBoxVmCollection.CreateForGuiltyOperators(model.OperatorStoppageReports, Parent.Parent.UOW); var osrRepo = new Dal.Repository<Model.OperatorStoppageReport>(Parent.Parent.UOW); GuiltyOperators.OperatorSelected += (vm, oldOp, newOp) => { if (newOp.Model == null) return; //update model if (vm.Model == null) { //create and add new OSR var osr = new Model.OperatorStoppageReport { StoppageReport = model, Operator = newOp.Model, ModifiedBy = LoginInfo.Id, }; osrRepo.Add(osr); vm.Model = osr; } else { //update existing OSR (vm.Model as Model.OperatorStoppageReport).Operator = newOp.Model; } }; GuiltyOperators.OperatorRemoved += vm => { if (vm.Model != null) { model.OperatorStoppageReports.Remove((vm.Model as Model.OperatorStoppageReport)); osrRepo.Delete((vm.Model as Model.OperatorStoppageReport)); } }; AffectsTaskReport = model.AffectsTaskReport; LostSeconds = model.LostTime; LostCount = model.LostCount; Description = model.Description; DeleteCommand = new Commands.Command(o => { //correct sums Parent.SumOfLostCount -= LostCount; Parent.SumOfLostTime-= LostSeconds; Parent.SumOfTimeEquivalent -= TimeEquivalent; Parent.SumOfCountEquivalent -= QuantityEquivalent; //delete Parent.List.Remove(this); Model.ProcessReport.StoppageReports.Remove(Model); new DataServices.ProcessReportDataService(Parent.Parent.UOW).Delete(Model); //reset indices for (int i = 0; i < Parent.List.Count; i++) { Parent.List[i].Index = i + 1; } }); }