private void CalculateQuote(PreferencesInfo preferenceInfo)
        {
            // do calculation and update results

            this.FabricationPercent = 25;
            this.AssemblyPercent    = 65;
            this.ComponentsPercent  = 10;

            this.TotalCost         = 776214.64;
            this.TotalDaysDuration = 5;
            this.FabricationCost   = 1710000.00;
            this.AssemblyCost      = 4995.00;
            this.ComponentsCost    = 957.00;

            var fabricationItemList = new List <FabricationItem>()
            {
                new FabricationItem()
                {
                    Name      = nameof(preferenceInfo.ImportantBoardInfo.BoardThinkness),
                    Value     = preferenceInfo.ImportantBoardInfo.BoardThinkness,
                    TimeRatio = Ratio.One,
                    CostRatio = Ratio.Three
                },

                new FabricationItem()
                {
                    Name      = nameof(preferenceInfo.ImportantBoardInfo.MaterialSelected),
                    Value     = preferenceInfo.ImportantBoardInfo.MaterialSelected.ToString(),
                    TimeRatio = Ratio.Two,
                    CostRatio = Ratio.Four
                }, new FabricationItem()
                {
                    Name      = nameof(preferenceInfo.ImportantBoardInfo.SolidMaskColorSelected),
                    Value     = preferenceInfo.ImportantBoardInfo.SolidMaskColorSelected.ToString(),
                    TimeRatio = Ratio.Three,
                    CostRatio = Ratio.Five
                }, new FabricationItem()
                {
                    Name      = nameof(preferenceInfo.ImportantBoardInfo.SurfaceFinishSelected),
                    Value     = preferenceInfo.ImportantBoardInfo.SurfaceFinishSelected.ToString(),
                    TimeRatio = Ratio.Five,
                    CostRatio = Ratio.One
                }, new FabricationItem()
                {
                    Name      = nameof(preferenceInfo.SpecialBoardInfo.ControlledImpadanceSelected),
                    Value     = preferenceInfo.SpecialBoardInfo.ControlledImpadanceSelected.ToString(),
                    TimeRatio = Ratio.Two,
                    CostRatio = Ratio.Two
                }, new FabricationItem()
                {
                    Name      = nameof(preferenceInfo.SpecialBoardInfo.CooperWeightInnerSelected),
                    Value     = preferenceInfo.SpecialBoardInfo.CooperWeightInnerSelected.ToString(),
                    TimeRatio = Ratio.One,
                    CostRatio = Ratio.Three
                }, new FabricationItem()
                {
                    Name      = nameof(preferenceInfo.SpecialBoardInfo.CooperWeightOuterSelected),
                    Value     = preferenceInfo.SpecialBoardInfo.CooperWeightOuterSelected.ToString(),
                    TimeRatio = Ratio.Five,
                    CostRatio = Ratio.Four
                },
            };

            foreach (var item in fabricationItemList)
            {
                item.ValidValues = GetValidValues(item.Name);
                FabricationList.Add(item);
            }
            var headerQuoteParametersList = new List <HeaderQuoteParameter>()
            {
                new HeaderQuoteParameter()
                {
                    ParameterName = "Fabrication",
                    DaysImpacted  = 4,
                    Cost          = 1710.00,
                    Items         = new ObservableCollection <QuoteParameter>()
                    {
                        new QuoteParameter()
                        {
                            ParameterName = "Base Fabrication",
                            Value         = "61.72x148.84mm 10 levels",
                            DaysImpacted  = 1,
                            Cost          = 10970.00
                        },
                        new QuoteParameter()
                        {
                            ParameterName = "Boards Quantity",
                            Value         = "20",
                            DaysImpacted  = 0,
                            Cost          = 538.00
                        },
                        new QuoteParameter()
                        {
                            ParameterName = "Surface Finish",
                            Value         = "ENEPIG",
                            DaysImpacted  = 3,
                            Cost          = 25.00
                        }
                    }
                },
                new HeaderQuoteParameter()
                {
                    ParameterName = "Assembly",
                    DaysImpacted  = 1,
                    Cost          = 4955.50,
                    Items         = new ObservableCollection <QuoteParameter>()
                    {
                        new QuoteParameter()
                        {
                            ParameterName = "Packages",
                            Value         = "package on Packages",
                            DaysImpacted  = 1,
                            Cost          = 2679.00
                        },
                        new QuoteParameter()
                        {
                            ParameterName = "Processes",
                            Value         = "Split Assemply",
                            DaysImpacted  = 0,
                            Cost          = 720.50
                        },
                        new QuoteParameter()
                        {
                            ParameterName = "Minimum Pich",
                            Value         = "0.3mm pitch BGA",
                            DaysImpacted  = 0,
                            Cost          = 804.00
                        }
                    }
                },
                new HeaderQuoteParameter()
                {
                    ParameterName = "Components",
                    DaysImpacted  = 0,
                    Cost          = 957.50,
                    Items         = new ObservableCollection <QuoteParameter>()
                    {
                        new QuoteParameter()
                        {
                            ParameterName = "Microchip ATTIMNY2313-2DSU",
                            Value         = "2",
                            DaysImpacted  = 0,
                            Cost          = 48.64
                        },
                        new QuoteParameter()
                        {
                            ParameterName = "Microchip ATTIMNY2313-18PC",
                            Value         = "1",
                            DaysImpacted  = 0,
                            Cost          = 20000
                        },
                        new QuoteParameter()
                        {
                            ParameterName = "Microchip ATTIMNY2313-19PC",
                            Value         = "1",
                            DaysImpacted  = 0,
                            Cost          = 30000
                        },
                        new QuoteParameter()
                        {
                            ParameterName = "Microchip ATTIMNY2313-6785",
                            Value         = "3",
                            DaysImpacted  = 0,
                            Cost          = 40000
                        }
                    }
                }
            };

            foreach (var item in headerQuoteParametersList)
            {
                HeaderQuoteParameters.Add(item);
            }

            Notify(() => this.FabricationPercent);
            Notify(() => this.AssemblyPercent);
            Notify(() => this.ComponentsPercent);
            Notify(() => this.TotalCost);
            Notify(() => this.TotalDaysDuration);
            Notify(() => this.FabricationCost);
            Notify(() => this.AssemblyCost);
            Notify(() => this.ComponentsCost);
        }
 public QuoteViewModel(PreferencesInfo preferenceInfo = null)
 {
     CalculateQuote(preferenceInfo);
 }