Пример #1
0
        protected override MobileObservableCollection<SampleUnit> ConvertPrimitivesToSamples(List<List<SamplePrimitive>> primitives)
        {
            var newSource = new MobileObservableCollection<SampleUnit>();

            for (var i = 0; i < primitives.Count; i++)
            {
                var data = primitives[i].Select(x => Convert.ToDouble(!((bool)x.SampleValue)));

                var commonItemId = (from s in primitives[i]
                                    group s by s.ItemId into gr
                                    orderby gr.Count() descending
                                    select gr).First().First().ItemId;

                var sampleValue = ProcessSubgroup(data);

                var subgroupSample = SpcManager.CreateSample(sampleValue, commonItemId, i);
                subgroupSample.SetXLabelValue(i, LabelValueDataTypes.Number);
                subgroupSample.SetSampleSize(data.Count());
                newSource.Add(subgroupSample);
            }

            UpdateLevelsValues(primitives, newSource);

            YStep = Math.Round(1 / (3 * ParentPanel.HeightMultiplier), 1);

            return newSource;
        }
Пример #2
0
        protected override void UpdateLevelsValues(List<List<SamplePrimitive>> primitives, MobileObservableCollection<SampleUnit> samples)
        {
            var dataList = primitives.SelectMany(x => x.Select(y => !((bool)y.SampleValue)));
            var dataSum = dataList.Sum(x => Convert.ToInt32(x));
            var dataCount = dataList.Count();

            var p = 0.0;
            var np = 0.0;
            var delta = 0.0;
            if (samples.Any())
            {
                p = (double) dataSum/dataCount;
                np = ParentPanel.SubgroupSize * p;
                delta = 3 * Math.Sqrt(np * (1 - p));

                Mean = Math.Round(np, 2);

                UCL = Math.Round(Mean + delta, 2);
                LCL = Math.Round(Math.Max(Mean - delta, 0), 2);
            }

            foreach (var sample in samples)
            {
                sample.SetUCL(UCL);
                sample.SetMean(Mean);
                sample.SetLCL(LCL);

                sample.SetUCL(ParentPanel.CustomUCL, true);
                sample.SetLCL(ParentPanel.CustomLCL, true);

                sample.SetUSL(ParentPanel.USL);
                sample.SetLSL(ParentPanel.LSL);
            }
        }
Пример #3
0
        public void ConstructorWithParamsTest()
        {
            var mb = new MobileObservableCollection<string>();
            var item = new DownloadCriteria(mb);

            Assert.AreEqual((new MobileList<string>(mb)).ToString(), item.DownloadList.ToString());
        }
Пример #4
0
        protected override MobileObservableCollection<SampleUnit> ConvertPrimitivesToSamples(List<List<SamplePrimitive>> primitives)
        {
            var newSource = new MobileObservableCollection<SampleUnit>();
            var list = primitives.SelectMany(x => x.Select(y => y.SampleValue)).Cast<double>().ToList();

            for (var i = 0; i < list.Count; i++)
            {
                if (i >= ParentPanel.SubgroupSize - 1)
                {
                    var data = list.GetRange(i - (ParentPanel.SubgroupSize - 1), ParentPanel.SubgroupSize);
                    var sampleValue = ProcessSubgroup(data);

                    var subgroupSample = SpcManager.CreateSample(sampleValue, primitives[i].Select(x => x.ItemId).First(), i);
                    subgroupSample.SetXLabelValue(i, LabelValueDataTypes.Number);
                    subgroupSample.SetSampleSize(1);
                    newSource.Add(subgroupSample);
                }
                else
                {
                    var sample = SpcManager.CreateSample(null, primitives[i].Select(x => x.ItemId).First(), i);
                    sample.SetXLabelValue(i, LabelValueDataTypes.Number);
                    sample.SetSampleSize(1);
                    newSource.Add(sample);
                }
            }

            UpdateLevelsValues(primitives, newSource);

            YStep = (double)primitives.Where(x => x[0].SampleValue != null).Max(x => x[0].SampleValue) / (3 * ParentPanel.HeightMultiplier);

            return newSource;
        }
Пример #5
0
/// <summary>
/// Gets the result list.
/// </summary>
/// <param name="choiceXml">The choice XML.</param>
/// <returns>MobileObservableCollection{ChoiceInfo}.</returns>
/// <exception cref="VeyronException">Failed to parse Result choices</exception>
        public MobileObservableCollection<ChoiceInfo> GetResultList(string choiceXml)
        {
            if (string.IsNullOrEmpty(choiceXml))
                return null;

            var list = new MobileObservableCollection<ChoiceInfo>();

            try
            {
                var root = XElement.Parse(choiceXml);
                var isGlobalChoice = bool.Parse(root.Attribute("IsGlobalChoice").Value);
                if (isGlobalChoice)
                {
                    var globalChoiceId = int.Parse(root.Attribute("GlobalChoiceId").Value, CultureInfo.InvariantCulture);
                    if (globalChoiceId == 0)
                        return list;

                    // AddedBy: R. Lunev
                    // Data: 06.12.2012
                    // Reason: If no global choice selected then Id = 0 will be passed to this method and exception will be thrown.
                    // Todo: Should be another logic implemented or "if (globalChoiceId > 0)" enough?
                    //only re-load if list is empty
                    if (globalChoiceId > 0 && !root.HasElements)
                    {
                        var globalChoiceItem = TypeManager.GetEditableRoot<IEditableRoot>(Constants.GlobalChoiceProcessName, globalChoiceId);
                        root = XElement.Parse(globalChoiceItem.ReadValueByPropertyName<string>("ChoiceDetails"));
                    }
                }

                foreach (var element in root.Descendants("Choice"))
                {
                    ChoiceInfo.AcceptanceCriterias criteria;
                    if (Enum.TryParse(element.Attribute("AcceptanceCriteria").Value, false, out criteria))
                        list.Add(
                            new ChoiceInfo
                                {
                                    AcceptanceCriteria = criteria,
                                    Choice = element.Attribute("Choice").Value,
                                    Score = double.Parse(element.Attribute("Score").Value, CultureInfo.InvariantCulture),
                                    IsCommentRequired = bool.Parse(element.Attribute("IsCommentRequired").Value),
                                    IsNewItemRequired = bool.Parse(element.Attribute("IsNewItemRequired").Value),
                                    NewItemProcessName = element.Attribute("NewItemProcessName").Value,
                                    NewItemProcessId =
                                        element.Attributes().Any(a => a.Name == "NewItemProcessId") ? int.Parse(element.Attribute("NewItemProcessId").Value, CultureInfo.InvariantCulture) : 0
                                });
                }
            }
            catch (Exception ex)
            {
                Log4NetLogger.Instance.Log(LogSeverity.Error, typeof(ResultFieldHelper).ToString(), ex);
                throw new VeyronException("Failed to parse Result choices", ex);
            }

            return list;
        }
Пример #6
0
        protected override void UpdateLevelsValues(List<List<SamplePrimitive>> primitives, MobileObservableCollection<SampleUnit> samples)
        {
            ResolveLimitsCalculationMethod(primitives, samples);

            foreach (var sample in samples)
            {
                sample.SetUCL(UCL);
                sample.SetMean(Mean);
                sample.SetLCL(LCL);

                sample.SetUCL(ParentPanel.CustomUCL, true);
                sample.SetLCL(ParentPanel.CustomLCL, true);

                sample.SetUSL(ParentPanel.USL);
                sample.SetLSL(ParentPanel.LSL);
            }
        }
Пример #7
0
        protected override void UpdateLevelsValues(List<List<SamplePrimitive>> primitives, MobileObservableCollection<SampleUnit> samples)
        {
            Mean = samples.Any() ? Math.Round(samples.Average(x => (double)x.SampleValue), 2) : 0;

            foreach (var sample in samples)
            {
                sample.SetUCL(UCL);
                sample.SetMean(Mean);
                sample.SetLCL(LCL);

                sample.SetUCL(ParentPanel.CustomUCL, true);
                sample.SetLCL(ParentPanel.CustomLCL, true);

                sample.SetUSL(ParentPanel.USL);
                sample.SetLSL(ParentPanel.LSL);
            }
        }
Пример #8
0
        protected override void UpdateLevelsValues(List<List<SamplePrimitive>> primitives, MobileObservableCollection<SampleUnit> samples)
        {            
            Mean = samples.Any(x => x.SampleValue != null) ? Math.Round(samples.Where(x => x.SampleValue != null).Average(x => (double)x.SampleValue), 2) : 0;

            UCL = Math.Round(Mean * StatisticConstants.D4(ParentPanel.SubgroupSize), 2);
            LCL = Math.Round(Math.Max(Mean * StatisticConstants.D3(ParentPanel.SubgroupSize), 0), 2);

            foreach (var sample in samples)
            {
                sample.SetUCL(UCL);
                sample.SetMean(Mean);
                sample.SetLCL(LCL);

                sample.SetUCL(ParentPanel.CustomUCL, true);
                sample.SetLCL(ParentPanel.CustomLCL, true);

                sample.SetUSL(ParentPanel.USL);
                sample.SetLSL(ParentPanel.LSL);
            }
        }
        public static List<LimitData> BuildUclLimits(MobileObservableCollection<SampleUnit> dataSource)
        {
            var list = new List<LimitData>();

            var category = 1;
            for (var i = 0; i < dataSource.Count - 1; i++ )
            {
                list.Add(new LimitData(category, dataSource[i].UCL));
                category++;
                list.Add(new LimitData(category, dataSource[i].UCL));
                list.Add(new LimitData(category, dataSource[i + 1].UCL));
                category++;
                list.Add(new LimitData(category, dataSource[i + 1].UCL));
            }

            if (dataSource.Count > 0 && list.Count == 0)
                list.Add(new LimitData(1, 0));

            return list;
        }
Пример #10
0
        protected override MobileObservableCollection<SampleUnit> ConvertPrimitivesToSamples(List<List<SamplePrimitive>> primitives)
        {
            var newSource = new MobileObservableCollection<SampleUnit>();
            var list = primitives.SelectMany(x => x.Select(y => y)).ToList();

            for (var i = 0; i < list.Count; i++)
            {
                var sampleValue = list[i].SampleValue;

                var subgroupSample = SpcManager.CreateSample(sampleValue, list[i].ItemId, i + 1);
                subgroupSample.SetXLabelValue(i + 1, LabelValueDataTypes.Number);
                subgroupSample.SetSampleSize(1);
                newSource.Add(subgroupSample);
            }

            UpdateLevelsValues(primitives, newSource);

            YStep = (int)Math.Abs(primitives.SelectMany(l1 => l1.Select(l2 => l2.SampleValue)).Cast<double>().Range() / (3 * ParentPanel.HeightMultiplier));

            return newSource;
        }
Пример #11
0
        protected override void UpdateLevelsValues(List<List<SamplePrimitive>> primitives, MobileObservableCollection<SampleUnit> samples)
        {
            var stdDevAv = samples.Any() ? Math.Round(samples.Average(x => (double)x.SampleValue), 2) : 0;

            Mean = Math.Round(stdDevAv, 3);
            UCL = Math.Round(StatisticConstants.B4(ParentPanel.SubgroupSize) * Mean, 2);
            LCL = Math.Round(StatisticConstants.B3(ParentPanel.SubgroupSize) * Mean, 2);

            foreach (var sample in samples)
            {
                sample.SetUCL(UCL);
                sample.SetMean(Mean);
                sample.SetLCL(LCL);

                sample.SetUCL(ParentPanel.CustomUCL, true);
                sample.SetLCL(ParentPanel.CustomLCL, true);

                sample.SetUSL(ParentPanel.USL);
                sample.SetLSL(ParentPanel.LSL);
            }
        }
Пример #12
0
        protected override void UpdateLevelsValues(List<List<SamplePrimitive>> primitives, MobileObservableCollection<SampleUnit> samples)
        {
            var rValues = primitives.Select(t => t.Select(x => (double)x.SampleValue).Range()).ToList();

            Mean = samples.Any() ? Math.Round(samples.Average(x => (double)x.SampleValue), 2) : 0;

            var rBar = rValues.Any() ? rValues.Average() : 0;

            UCL = Math.Round(rBar * StatisticConstants.D4(ParentPanel.SubgroupSize), 2);
            LCL = Math.Round(rBar * StatisticConstants.D3(ParentPanel.SubgroupSize), 2);

            foreach (var sample in samples)
            {
                sample.SetUCL(UCL);
                sample.SetMean(Mean);
                sample.SetLCL(LCL);

                sample.SetUCL(ParentPanel.CustomUCL, true);
                sample.SetLCL(ParentPanel.CustomLCL, true);

                sample.SetUSL(ParentPanel.USL);
                sample.SetLSL(ParentPanel.LSL);
            }
        }
        public async void CalculateFailedPercentAsync_PChartTest()
        {
            var editableRootMock = Mock.Create<IEditableRoot>();
            var privateAccessor = PrivateAccessor.ForType(typeof(SpcExpressionHelperModule));

            var parameters = new object[] { "FailedPercent_f", "SPC_f", null, 10, 39, "PChart" };
            var arrange = Mock.NonPublic.Arrange<Task<ChartPanel>>(typeof(SpcExpressionHelperModule), "GetChartDescriptorAsync",
                ArgExpr.IsAny<IEditableRoot>(), ArgExpr.IsAny<string>(), ArgExpr.IsAny<string>(), ArgExpr.IsAny<ChartTypesEnum>(),
                ArgExpr.IsAny<int>(), ArgExpr.IsAny<int>());

            //prepare chart descriptor
            var dataSourceMock = new MobileObservableCollection<SampleUnit> { CreateSample(0.4, 0.8648, 0.4, 0.0, 10) };
            var chartMock = Mock.Create<PChart>(Constructor.Mocked, Behavior.Loose);
            Mock.Arrange(() => chartMock.DataSource).Returns(dataSourceMock);
            Mock.Arrange(() => chartMock.IsChild).Returns(true);
            var charts = new ChartCollection { chartMock };

            var chartDescriptor = Mock.Create<ChartPanel>(Constructor.Mocked, Behavior.Loose);
            chartDescriptor.ChartType = ChartTypesEnum.PChart;
            chartDescriptor.Charts = charts;

            //test true
            arrange.Returns(TaskHelper.FromResult(chartDescriptor));
            var task = privateAccessor.CallMethod("CalculateFailedPercentExpressionAsync", editableRootMock, parameters) as Task<bool?>;
            Assert.IsNotNull(task);
            Assert.IsTrue((bool) await task);

            //test false
            parameters[4] = 41;
            task = privateAccessor.CallMethod("CalculateFailedPercentExpressionAsync", editableRootMock, parameters) as Task<bool?>;
            Assert.IsNotNull(task);
            Assert.IsFalse((bool) await task);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="UniqueIndexViolationException"/> class.
 /// </summary>
 /// <param name="error">The error.</param>
 public UniqueIndexViolationException(MobileObservableCollection<UniqueIndexViolationError> error)
 {
     ErrorContext = error;
 }
Пример #15
0
        protected override void UpdateLevelsValues(List<List<SamplePrimitive>> primitives, MobileObservableCollection<SampleUnit> samples)
        {
            var dataList = primitives.SelectMany(x => x.Select(y => !((bool) y.SampleValue)));
            var dataSum = dataList.Sum(x => Convert.ToInt32(x));
            var dataCount = dataList.Count();

            var averageSampleSize = primitives.Select(x => x.Count).Average();            

            Mean = samples.Any() ? Math.Round((double) dataSum / dataCount, 4) : 0;

            var delta = 3 * Math.Sqrt((Mean * (1 - Mean)) / averageSampleSize);

            UCL = Math.Round(Math.Min(Mean + delta, 1), 4);
            LCL = Math.Round(Math.Max(Mean - delta, 0), 4);

            foreach (var sample in samples)
            {
                if (AverageLimits)
                {
                    sample.SetUCL(UCL);
                    sample.SetMean(Mean);
                    sample.SetLCL(LCL);
                }
                else
                {
                    delta = 3 * Math.Sqrt((Mean * (1 - Mean)) / sample.SampleSize);

                    sample.SetUCL(Math.Round(Math.Min(Mean + delta, 1), 4));
                    sample.SetMean(Mean);
                    sample.SetLCL(Math.Round(Math.Max(Mean - delta, 0), 4));
                }

                sample.SetUCL(ParentPanel.CustomUCL, true);
                sample.SetLCL(ParentPanel.CustomLCL, true);

                sample.SetUSL(ParentPanel.USL);
                sample.SetLSL(ParentPanel.LSL);
            }
        }
Пример #16
0
        private void RefreshInternal()
        {
            IsBusy = true;

            var filterList = new MobileObservableCollection<IFilterDescriptor>();
            filterList.AddRange(Filters);

            var filterText = (FilterString ?? string.Empty).Trim();

            if (!string.IsNullOrEmpty(filterText))
            {
                var quickSearchFilters = new MobileObservableCollection<IFilterDescriptor>();

                foreach (var column in Columns)
                {
                    quickSearchFilters.Add(new FilterDescriptor(column.Property.Name, FilterOperator.Contains, filterText));
                }

                filterList.Add(new FilterDescriptor(LogicalOperators.Or, quickSearchFilters));
            }

            if (ColumnFilter != null)
                filterList.Add(ColumnFilter);

            DynamicTypeManager.BeginGetCrossReferenceList(
                ProcessName,
                FieldName,
                OnItemsLoaded,
                SortDescriptors,
                string.Empty,
                PageSize,
                CurrentPageNumber,
                FilterDescriptor.GetFilterExpression(filterList));
        }
Пример #17
0
        public void UpdateLevelValues(MobileObservableCollection<SampleUnit> samples, bool recalculateSamples = false)
        {
            if (recalculateSamples)
            {
                var sampleList = OriginalData.Select(item => new SamplePrimitive(item.YValue, 0, "Number")).ToList();
                samples.Clear();
                foreach (var computeSubgroup in ComputeSubgroups(sampleList, 0, 0))
                    samples.Add(computeSubgroup);
                return;
            }

            var minX = 0.0;
            var maxx = 0.0;

            var standardStepCount = GetStepCount(OriginalData.Count);
            _minimum = OriginalData.Count > 0 ? Math.Floor(OriginalData.Min(x => (double)x.YValue)) : 0;
            var max = OriginalData.Count > 0 ? OriginalData.Max(x => (double)x.YValue) : 0;
            var integerMax = Math.Ceiling(max);
            if ((max % integerMax).Equals(0.0))
                integerMax++;
            _maximum = integerMax;
            _stepWidth = Math.Abs(_maximum - _minimum) / ParentPanel.RangeSteps;

            if (_stepWidth > 1 && ParentPanel.RangeSteps == standardStepCount)
            {
                _stepWidth = Convert.ToInt32(_stepWidth);
                ParentPanel.SetSilently(ChartPanel.ExponentProperty, 0);
            }
            else
            {
                var e = ParentPanel.Exponent == 0 ? (int) Math.Ceiling(Math.Log10(1/_stepWidth)) : ParentPanel.Exponent;
                if (ParentPanel.Exponent < e)
                    ParentPanel.SetSilently(ChartPanel.ExponentProperty, e);
                else
                    e = ParentPanel.Exponent;

                _stepWidth = Math.Round(_stepWidth, e);
            }

            if (samples.Any())
                _maximum = Convert.ToDouble(samples.Last().CategoryValue.LabelValue, CultureInfo.InvariantCulture);

            var list = new List<double>();
            if (ShowLSL)
                list.Add(ParentPanel.LSL);
            list.Add(UseCustomCLs ? ParentPanel.CustomLCL : LCL);
            list.Add(_minimum);
            minX = list.Min();

            list = new List<double>();
            if (ShowUSL)
                list.Add(ParentPanel.USL);
            list.Add(UseCustomCLs ? ParentPanel.CustomUCL : UCL);
            list.Add(_maximum);
            maxx = list.Max();

            var deltaMin = _minimum - minX;
            if (deltaMin > 0)
            {
                var newDelta = deltaMin + (_stepWidth - (deltaMin % _stepWidth));
                var deltaLength = newDelta / _stepWidth;

                var startValue = _minimum - _stepWidth;

                for (var i = 0; i < deltaLength; i++)
                {
                    var subgroupSample = SpcManager.CreateSample(null, 0, i);
                    subgroupSample.SetXLabelValue(startValue, LabelValueDataTypes.Number);
                    subgroupSample.SetSampleSize(0);
                    samples.Insert(0, subgroupSample);

                    startValue -= _stepWidth;
                }

                _minimum = startValue + _stepWidth;
            }
            else
            {
                var sample = SpcManager.CreateSample(null, 0, 0);
                sample.SetXLabelValue(_minimum - _stepWidth, LabelValueDataTypes.Number);
                sample.SetSampleSize(0);
                samples.Insert(0, sample);
            }

            var deltaMax = maxx - _maximum;
            if (deltaMax > 0)
            {
                var newDelta = deltaMax + (_stepWidth - (deltaMax % _stepWidth));
                var deltaLength = newDelta / _stepWidth;

                var startValue = _maximum + _stepWidth;

                for (var i = 0; i < deltaLength; i++)
                {
                    var subgroupSample = SpcManager.CreateSample(null, 0, i);
                    subgroupSample.SetXLabelValue(startValue, LabelValueDataTypes.Number);
                    subgroupSample.SetSampleSize(0);
                    samples.Add(subgroupSample);

                    startValue += _stepWidth;
                }

                _maximum = startValue - _stepWidth;
            }
            else
            {
                var sample = SpcManager.CreateSample(null, 0, 0);
                sample.SetXLabelValue(_maximum + _stepWidth, LabelValueDataTypes.Number);
                sample.SetSampleSize(0);
                samples.Add(sample);
            }

            for (var i = 0; i < samples.Count; i++)
            {
                samples[i].SetIndex(i);
                samples[i].CategoryValue.Index = i;
            }

            MinXValue = _minimum = deltaMin > 0 ? _minimum : _minimum - _stepWidth;
            MaxXValue = _maximum = deltaMax > 0 ? _maximum + _stepWidth : _maximum + _stepWidth * 2;
            XStep = _stepWidth;

            BellCurveData = new MobileObservableCollection<ElementarySampleInfo>();
            var nh = 0.0;
            if (OriginalData != null)
                nh = (OriginalData.Count * XStep); //needed to bring bell curve to the scale of histogram
            var floatingSigma = Mean - 4 * Sigma;
            for (var i = 0; i < 49; i++)
            {
                var value = (1 / (Sigma * Math.Sqrt(2 * Math.PI))) * Math.Pow(Math.E, -0.5 * Math.Pow((floatingSigma - Mean) / Sigma, 2)) * nh;
                BellCurveData.Add(DataPortal.Fetch<ElementarySampleInfo>(new LimitData(floatingSigma, value)));

                floatingSigma += 1 / 6.0 * Sigma;
            }
        }
Пример #18
0
        public IHttpActionResult GetMultiCrossRefValues(CrossRefLoadModel requestModel)
        {
            if (requestModel == null)
            {
                throw new ArgumentNullException("requestModel");
            }

            try
            {
                DetailsModelContainer detailsModel = ExtractModelFromRequest(requestModel);
                if (detailsModel.Model == null)
                {
                    return this.Json(new DetailsSaveResult { Success = false, Message = "Item not found. Was it deleted while you were editing it?" });
                }

                string fullName = string.Join(".", detailsModel.Model.GetFullPropertyPath(requestModel.FieldName));
                PropertyInfo property = detailsModel.Model.GetPropertyByFullName(fullName);

                IEditableRoot model = detailsModel.Model.GetAncestor(property);

                MobileObservableCollection<IFilterDescriptor> filterList = new MobileObservableCollection<IFilterDescriptor>();
                IEnumerable<IFilterDescriptor> crossRefFilters = DynamicTypeManager.GetCrossRefFilter(model, requestModel.FieldName);
                if (crossRefFilters != null)
                {
                    filterList.AddRange(crossRefFilters);
                }

                //string filterText = string.Empty; // (FilterString ?? string.Empty).Trim();

                //if (!string.IsNullOrEmpty(filterText))
                //{
                //    var quickSearchFilters = new MobileObservableCollection<IFilterDescriptor>();

                //    //foreach (var column in Columns)
                //    //{
                //    //    quickSearchFilters.Add(new FilterDescriptor(column.Property.Name, FilterOperator.Contains, filterText));
                //    //}

                //    filterList.Add(new FilterDescriptor(LogicalOperators.Or, quickSearchFilters));
                //}

                var items = DynamicTypeManager.GetCrossReferenceList(
                        model.ProcessName,
                        requestModel.FieldName,
                        null,
                        // SortDescriptors,
                        string.Empty,
                        1000,
                        // PageSize
                        0,
                        //CurrentPageNumber,
                        FilterDescriptor.GetFilterExpression(filterList)
                    );

                CrossRefFieldAttribute mcrAttribute = property.GetCustomAttribute<CrossRefFieldAttribute>();

                IList<IdValues> values = new List<IdValues>();
                foreach (var l in items)
                {
                    var id = (int)l.GetType().GetProperty(Constants.IdColumnName).GetValue(l);
                    var value = SafeTypeConverter.Convert<string>(l.GetType().GetProperty(mcrAttribute.RefFieldName).GetValue(l));
                    values.Add(new IdValues(id, value));
                }

                return this.Ok(values);
            }
            catch (Exception ex)
            {
                Logger.Log(LogSeverity.Error, "ProcessController", ex);
                throw;
            }
        }
Пример #19
0
        public void ApplyingSortingPreserveFilteringGottenFrom_MCR_ShowSearchReferenced()
        {
            var vm = GetNewSearchListVm();

            Mock.Arrange(() => vm.ProcessSystemName).Returns("processName");
            Mock.Arrange(() => vm.FilterString).Returns("filterString");
            Mock.Arrange(() => vm.SortDescriptors).Returns(new SortList());
            Mock.Arrange(() => vm.GroupColumn).Returns("groupColumn");
            Mock.Arrange(() => vm.Columns).Returns(new ColumnCollection());

            var quickFilterToolbarViewModel = new QuickFilterToolbarViewModel();
            vm.QuickFilterToolbarVM = new Lazy<QuickFilterToolbarViewModel>();
            Mock.Arrange(() => quickFilterToolbarViewModel.RefreshQuickFilters()).Returns(TaskHelper.GetEmptyTask);
            Mock.Arrange(() => vm.QuickFilterToolbarVM.Value).Returns(quickFilterToolbarViewModel);

            var filterListVM = new FilterListViewModel();
            Mock.Arrange(() => vm.FilterListVM).Returns(filterListVM);

            var filterDescriptor = new FilterDescriptor();
            Mock.Arrange(() => filterDescriptor.ToJSON()).Returns("expected");
            var filterList = new MobileObservableCollection<IFilterDescriptor> { filterDescriptor };

            Mock.NonPublic.Arrange(vm, "AddMandatoryFilter", ArgExpr.IsAny<MobileObservableCollection<IFilterDescriptor>>()).DoNothing();

            Mock.Arrange(() => vm.TheFetchSearchListService.Refresh(
                Arg.AnyString,
                Arg.AnyInt,
                Arg.AnyInt,
                Arg.IsAny<SortList>(),
                Arg.AnyString,
                Arg.IsAny<ColumnCollection>(),
                Arg.IsAny<MobileObservableCollection<IFilterDescriptor>>(),
                Arg.AnyString,
                Arg.IsAny<Action<DataPortalResult<IInfoList>>>())).DoNothing();

            vm.RefreshSearchList(filterList);
            Assert.AreEqual("expected", vm.AppliedFilter.TempFilterDefinitions);
        }
Пример #20
0
        protected override MobileObservableCollection<SampleUnit> ConvertPrimitivesToSamples(List<List<SamplePrimitive>> primitives)
        {
            var newSource = new MobileObservableCollection<SampleUnit>();

            var startValue = _minimum;

            for (var i = 0; i < primitives.Count; i++)
            {
                var data = primitives[i].Select(x => (double)x.SampleValue);

                var sampleValue = ProcessSubgroup(data);
                var subgroupSample = SpcManager.CreateSample(sampleValue, 0, i);
                subgroupSample.SetXLabelValue(startValue, LabelValueDataTypes.Number);
                subgroupSample.SetSampleSize(data.Count());
                newSource.Add(subgroupSample);

                startValue += _stepWidth;
            }

            UpdateLevelsValues(primitives, newSource);

            return newSource;
        }
Пример #21
0
        public IHttpActionResult GetSingleCrossRefValues(CrossRefLoadModel requestModel)
        {
            if (requestModel == null)
            {
                throw new ArgumentNullException("requestModel");
            }

            try
            {
                DetailsModelContainer detailModel = ExtractModelFromRequest(requestModel);
                if (detailModel.Model == null)
                {
                    return Json(new DetailsSaveResult { Success = false, Message = "Item not found. Was it deleted while you were editing it?" });
                }

                string fullName = string.Join(".", detailModel.Model.GetFullPropertyPath(requestModel.FieldName));
                PropertyInfo property = detailModel.Model.GetPropertyByFullName(fullName);

                IEditableRoot entity = detailModel.Model.GetAncestor(property);

                var filterList = new MobileObservableCollection<IFilterDescriptor>();
                
                var crossRefFilters = DynamicTypeManager.GetCrossRefFilter(entity, requestModel.FieldName);
                if (crossRefFilters != null)
                {
                    filterList.AddRange(crossRefFilters);
                }

                var items = DynamicTypeManager.GetCrossReferenceListPage(entity.ProcessName, requestModel.FieldName, entity.Id, null, 1000, filterExpression: FilterDescriptor.GetFilterExpression(filterList));

                CrossRefFieldAttribute customAttribute = property.GetCustomAttribute<CrossRefFieldAttribute>();

                IList<IdValues> values = new List<IdValues>();
                foreach (var item in items)
                {
                    var id = (int)item.GetType().GetProperty(Constants.IdColumnName).GetValue(item);
                    var value = SafeTypeConverter.Convert<string>(item.GetType().GetProperty(customAttribute.RefFieldName).GetValue(item));
                    values.Add(new IdValues(id, value));
                }

                return Ok(values);
            }
            catch (Exception ex)
            {
                Logger.Log(LogSeverity.Error, "ProcessController", ex);
                throw;
            }
        }
Пример #22
0
        public IHttpActionResult GetCrossReferenceList(string process, int id, string field, int pageIndex, string filterString)
        {
            if (string.IsNullOrEmpty(process))
            {
                return BadRequest("Process name is required.");
            }

            if (filterString.Contains(CReffFilterTemplate))
            {
                filterString = filterString.Replace(CReffFilterTemplate, "");
            }

            var totalRowCount = 0;
            int pageNumber = 0;
            try
            {
                var details = DynamicTypeManager.GetEditableRoot<IEditableRoot>(process, id);

                string fullName = string.Join(".", details.GetFullPropertyPath(field));
                var property = details.GetPropertyByFullName(fullName);

                var entity = details.GetAncestor(property);

                var filterList = new MobileObservableCollection<IFilterDescriptor>();

                var crossRefFilters = DynamicTypeManager.GetCrossRefFilter(entity, field);
                if (crossRefFilters != null)
                {
                    filterList.AddRange(crossRefFilters);
                }

                var itemList = SearchUtils.GetCrossReferenceList(process, field, id, filterList, pageIndex, filterString);

                totalRowCount = (int)itemList.GetType().GetProperty("TotalRowCount").GetValue(itemList);
                pageNumber = (int)itemList.GetType().GetProperty("PageNumber").GetValue(itemList);

                var result = SingleCrossRefResult.Create(totalRowCount, pageNumber, itemList, property);

                return Ok(result);
            }
            catch (ProcessNotFoundException)
            {
                return NotFound();
            }
            catch (Exception ex)
            {
                Logger.Log(LogSeverity.Error, LoggerSource, ex);
                return InternalServerError();
            }
        }
Пример #23
0
        public IHttpActionResult GetMultiCrossRefValues(string process, int id, string field, int pageIndex, bool isSkipFilter, string filterString, Filter filter)
        {
            if (string.IsNullOrEmpty(process))
            {
                return BadRequest("Process name is required.");
            }          

            if (filterString.Contains(CReffFilterTemplate))
            {
                filterString = filterString.Replace(CReffFilterTemplate, "");
            }

            var totalRowCount = 0;
            int pageNumber = 0;

            try
            {
                var details = DynamicTypeManager.GetEditableRoot<IEditableRoot>(process, id);
                string fullName = string.Join(".", details.GetFullPropertyPath(field));
                PropertyInfo property = details.GetPropertyByFullName(fullName);
                var model = details.GetAncestor(property);

                MobileObservableCollection<IFilterDescriptor> filterList = new MobileObservableCollection<IFilterDescriptor>();

                //if (!string.IsNullOrWhiteSpace(skipItemList) && skipItemList != "0")
                //{
                //    var skipItemFilter = new FilterDescriptor(Constants.IdColumnName, FilterOperator.NotIn, skipItemList.Split('|'));
                //    filterList.Add(skipItemFilter);
                //}

                if (filter != null && !string.IsNullOrWhiteSpace(filter.FilterDefinition))
                {
                    filterList.Add(FilterDescriptor.FromJSON(filter.FilterDefinition));
                }
                
                if (!isSkipFilter)
                {
                    IEnumerable<IFilterDescriptor> crossRefFilters = DynamicTypeManager.GetCrossRefFilter(model, field);
                    if (crossRefFilters != null)
                    {
                        filterList.AddRange(crossRefFilters);
                    }
                }

                var itemList = DynamicTypeManager.GetCrossReferenceList(process, field,
                       null,
                       filterString,
                       10,
                       pageIndex,
                       FilterDescriptor.GetFilterExpression(filterList)
                   );

                totalRowCount = (int)itemList.GetType().GetProperty("TotalRowCount").GetValue(itemList);
                pageNumber = (int)itemList.GetType().GetProperty("PageNumber").GetValue(itemList);

                var result = MultiCrossRefResult.Create(itemList, property, totalRowCount, pageNumber);

                return this.Ok(result);
            }
            catch (Exception ex)
            {
                Logger.Log(LogSeverity.Error, "ProcessController", ex);
                throw;
            }
        }
Пример #24
0
        public override MobileObservableCollection<SampleUnit> ComputeSubgroups(List<SamplePrimitive> data, int size, int points)
        {
            var result = new List<List<SamplePrimitive>>();

            if (data != null && data.Any())
            {
                if (!CanExecute(data[0].SampleType))
                    return new MobileObservableCollection<SampleUnit>();
            }
            else
                return new MobileObservableCollection<SampleUnit>();

            var standardStepCount = GetStepCount(data.Count);
            if (ParentPanel.RangeSteps == 0)
                ParentPanel.SetSilently(ChartPanel.RangeStepsProperty, standardStepCount);

            MinXValue = _minimum = Math.Floor(data.Min(x => (double)x.SampleValue));
            var max = data.Max(x => (double) x.SampleValue);
            var integerMax = Math.Ceiling(max);
            if ((max % integerMax).Equals(0.0))
                integerMax++;
            MaxXValue = _maximum = integerMax;
            XStep = _stepWidth = Math.Abs(_maximum - _minimum) / ParentPanel.RangeSteps;

            if (_stepWidth > 1 && ParentPanel.RangeSteps == standardStepCount)
            {
                _stepWidth = Convert.ToInt32(_stepWidth);
                ParentPanel.SetSilently(ChartPanel.ExponentProperty, 0);
            }
            else
            {
                var e = (int) Math.Ceiling(Math.Log10(1/_stepWidth));
                if (ParentPanel.Exponent < e)
                    ParentPanel.SetSilently(ChartPanel.ExponentProperty, e);
                else
                    e = ParentPanel.Exponent;

                _stepWidth = Math.Round(_stepWidth, e);
            }

            var subgroup = new List<SamplePrimitive>();
            var startValue = _minimum;
            var stopValue = _minimum + _stepWidth;
            foreach (var item in data.OrderBy(x => x.SampleValue))
            {
                if ((double)item.SampleValue >= startValue & (double)item.SampleValue < stopValue)
                    subgroup.Add(item);
                else
                {
                    while ((double)item.SampleValue >= stopValue)
                    {
                        result.Add(subgroup.ToList());

                        subgroup = new List<SamplePrimitive>();
                        startValue = stopValue;
                        stopValue += _stepWidth;    
                    }
                    
                    subgroup.Add(item);
                }                
            }

            result.Add(subgroup.ToList());

            OriginalData = new MobileObservableCollection<ElementarySampleInfo>();
            foreach (var samplePrimitive in data)
            {
                OriginalData.Add(DataPortal.Fetch<ElementarySampleInfo>(samplePrimitive));
            }

            return ConvertPrimitivesToSamples(result);
        }
Пример #25
0
        private IFilterDescriptor PrepareFilter()
        {
            var list = new MobileObservableCollection<IFilterDescriptor>();

            foreach (var filter in _filterValues)
            {
                list.Add(new FilterDescriptor(filter.Key, FilterOperator.Contains, filter.Value));
            }

            return list.Any() ? new FilterDescriptor(LogicalOperators.And, list) : null;
        }
Пример #26
0
        protected MobileObservableCollection<IFilterDescriptor> GetFilter()
        {
            var mobileList = new MobileObservableCollection<IFilterDescriptor>();

            if (SelectedProcess != Constants.BasePersonProcessName)
            {
                mobileList.Add(new FilterDescriptor(LogicalOperators.And, new MobileObservableCollection<IFilterDescriptor>
                    {
                        new FilterDescriptor(Constants.DerivedProcessColumnName, FilterOperator.StartsWith, SelectedProcess + "|")
                    }));
            }

            if (!string.IsNullOrEmpty(FilterString))
            {
                mobileList.Add(new FilterDescriptor(LogicalOperators.Or, new MobileObservableCollection<IFilterDescriptor>
                    {
                        new FilterDescriptor("FirstName", FilterOperator.Contains, FilterString),
                        new FilterDescriptor("LastName", FilterOperator.Contains, FilterString),
                        new FilterDescriptor("Email", FilterOperator.Contains, FilterString),
                    }));
            }

            return mobileList;
        }
        private void RefreshAvailableItems()
        {
            IsBusy = true;

            var mbList = new MobileObservableCollection<IFilterDescriptor>();

            if (ItemsFilter != null)
                mbList.Add(ItemsFilter);

            if (!string.IsNullOrEmpty(FilterString) && DisplayFields.Count > 0)
            {
                var containsFilters = new MobileObservableCollection<IFilterDescriptor>();

                foreach (var fields in DisplayFields.Select(prop => new FilterDescriptor(prop, FilterOperator.Contains, FilterString)))
                    containsFilters.Add(fields);

                if (containsFilters.Count > 0)
                    mbList.Add(new FilterDescriptor(LogicalOperators.Or, containsFilters));
            }

            var filter = mbList.Count > 0 ? FilterDescriptor.GetFilterExpression(mbList) : string.Empty;

            DynamicTypeManager.BeginGetCrossReferenceList(
                ProcessName,
                FieldName,
                (o, r) =>
                    {
                        IsBusy = false;

                        if (r.Error != null)
                        {
                            PopupFactory.NotifyFailure(r.Error);
                            return;
                        }

                        AvailableItems = r.Object;
                        UpdateSelectedItems();

                        var itemCount = AvailableItems.GetType().GetProperty(Constants.TotalRowCountPropertyName);
                        if (itemCount != null)
                            ItemCount = (int)itemCount.GetValue(AvailableItems, BindingFlags.Instance, null, null, null);

                        var pageIndexProperty = AvailableItems.GetType().GetProperty(Constants.PageNumberPropertyName);
                        if (pageIndexProperty != null)
                            _currentPageNumber = (int)pageIndexProperty.GetValue(AvailableItems, BindingFlags.Instance, null, null, null);
                    },
                pageNumber: CurrentPageNumber,
                filterExpression: filter,
                sortDescriptors: SortDescriptors);
        }
Пример #28
0
        private void ResolveLimitsCalculationMethod(List<List<SamplePrimitive>> primitives, MobileObservableCollection<SampleUnit> samples)
        {
            var allRenderedCharts = ParentPanel.Charts.Select(x => x.ChartType);

            if (allRenderedCharts.Contains(ChartTypesEnum.RChart))
            {
                var rValues = new List<double>();

                for (var i = 0; i < primitives.Count; i++)
                    rValues.Add(primitives[i].Select(x => (double)x.SampleValue).Range());

                var rBar = rValues.Any() ? rValues.Average() : 0;
                Mean = samples.Any() ? Math.Round(samples.Average(x => (double)x.SampleValue), 2) : 0;

                var a2 = StatisticConstants.A2(ParentPanel.SubgroupSize);

                UCL = Math.Round(Mean + rBar * a2, 2);
                LCL = Math.Round(Mean - rBar * a2, 2);
            }
            else if (allRenderedCharts.Contains(ChartTypesEnum.StDevChart))
            {
                var stDevList = new List<double>();
                for (var i = 0; i < primitives.Count; i++)
                {
                    var data = primitives[i].Select(x => x.SampleValue).Cast<double>();
                    var calculatedValue = data != null && data.Any() ? Math.Round(data.StdDev(), 3) : 0;
                    stDevList.Add(calculatedValue);
                }
                var stdDevAv = stDevList.Any() ? stDevList.Average() : 0;

                Mean = samples.Any() ? Math.Round(samples.Average(x => (double)x.SampleValue), 2) : 0;

                var a3 = StatisticConstants.A3(ParentPanel.SubgroupSize);

                UCL = Math.Round(Mean + stdDevAv * a3, 2);
                LCL = Math.Round(Mean - stdDevAv * a3, 2);
            }
            else if (allRenderedCharts.Contains(ChartTypesEnum.XMRChart))
            {
                var mrList = new List<double>();
                var list = primitives.SelectMany(x => x.Select(y => y.SampleValue)).Cast<double>().ToList();

                for (var i = 0; i < list.Count; i++)
                {
                    if (i >= ParentPanel.SubgroupSize - 1)
                    {
                        var data = list.GetRange(i - (ParentPanel.SubgroupSize - 1), ParentPanel.SubgroupSize);
                        var sampleValue = data != null && data.Any() ? (double?)Math.Abs(data.Max() - data.Min()) : null;
                        if (sampleValue.HasValue)
                            mrList.Add(sampleValue.Value);
                    }
                }
                var mrAv = mrList.Any() ? mrList.Average() : 0;

                Mean = samples.Any() ? Math.Round(samples.Average(x => (double)x.SampleValue), 2) : 0;

                var d2 = StatisticConstants.d2(ParentPanel.SubgroupSize);

                UCL = Math.Round(Mean + 3 * (mrAv / d2), 2);
                LCL = Math.Round(Mean - 3 * (mrAv / d2), 2);
            }
        }
Пример #29
0
        private void AddMandatoryFilter(MobileObservableCollection<IFilterDescriptor> filterList, string processSystemName)
        {
            var filterInfoType = DynamicTypeManager.GetFilterInfoType(processSystemName);
            if (filterInfoType != null)
            {
                IFilter[] filters = (IFilter[])filterInfoType.GetProperty("FilterList", BindingFlags.Static | BindingFlags.Public).GetValue(null, null);

                if (filters != null)
                {
                    IList<int> identityRoles = ((Library.Security.MQ1Identity)ApplicationContext.User.Identity).RolesId;
                    if (identityRoles == null || identityRoles.Count == 0) return;

                    var mandatoryFilters = filters.Where(x => !string.IsNullOrEmpty(x.RoleIds));
                    foreach (IFilter filter in mandatoryFilters)
                    {
                        var filterRoles = filter.RoleIds.Split(',').Select(int.Parse).ToList();
                        if (filterRoles.Contains(Constants.AllRolesId) || identityRoles.Intersect(filterRoles).Any())
                        {
                            IFilterDescriptor filterDescriptor = (FilterDescriptor)FilterDescriptor.FromJSON(filter.Definition);

                            var filterValue = filterDescriptor.Value as FilterValue;
                            if (filterValue != null && filterValue.Type == FilterValueType.Udp)
                                filterValue.ProvidedValue = filterValue.DefaultValue;

                            filterDescriptor.ReplacePredefinedValues(null);
                            if (!filterList.Any(f => f.FilterGuid.Equals(filterDescriptor.FilterGuid)))
                                filterList.Add(filterDescriptor);
                        }
                    }
                }
            }
        }
Пример #30
0
        protected override void UpdateLevelsValues(List<List<SamplePrimitive>> primitives, MobileObservableCollection<SampleUnit> samples)
        {
            var mrList = new List<double>();
            var list = OriginalData.Select(x => Convert.ToDouble(x.YValue)).ToList();

            const int subgroupSize = 2;
            for (var i = 0; i < list.Count; i++)
            {
                if (i >= subgroupSize - 1)
                {
                    var data = list.GetRange(i - (subgroupSize - 1), subgroupSize);
                    var sampleValue = data.Any() ? Math.Abs(data.Max() - data.Min()) : 0.0;
                    mrList.Add(sampleValue);
                }
            }
            var mrAv = mrList.Any() ? mrList.Average() : 0.0;

            Mean = list.Any() ? Math.Round(list.Average(), 3) : 0.0;

            var d2 = StatisticConstants.d2(subgroupSize);

            UCL = Math.Round(Mean + 3 * (mrAv / d2), 3);
            LCL = Math.Round(Mean - 3 * (mrAv / d2), 3);

            Sigma = Math.Round(mrAv / d2, 3);            

            UpdateLevelValues(samples);
        }