private void Delete_OnClick(object sender, RoutedEventArgs e)
        {
            var viewModel = (RecordManagerViewModel)DataContext;

            var SelectedItem = RecordsListBox.SelectedItem as RecordViewModel;

            if (SelectedItem != null)
            {
                var db = CrystalClearDB.GetInstance();
                if (db == null)
                {
                    viewModel.ShowMessageCommand.Execute("Something went wrong. Please try it again.");
                    return;
                }

                var record      = SelectedItem.ToRecord();
                int rowAffected = db.DeleteRecord(record);
                if (rowAffected == 1)
                {
                    viewModel.Records.Remove(SelectedItem);
                }
                else
                {
                    viewModel.ShowMessageCommand.Execute("Something went wrong. Please try it again.");
                }
            }
            else
            {
                viewModel.ShowMessageCommand.Execute("Please select one in order to delete.");
            }
        }
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            // Initialize the database
            CrystalClearDB.InitializeDatabase();

            //Task.Run(() => this.TestEngine());
        }
Exemple #3
0
        private void ExtendedClosingEventHandler(object sender, DialogClosingEventArgs eventArgs)
        {
            if ((bool)eventArgs.Parameter == false)
            {
                this.SelectedReservoir = null;
                return;
            }

            ReservoirAddDialog dialog = eventArgs.Session.Content as ReservoirAddDialog;
            var newName = dialog.TextReservoirName.Text;

            if (!string.IsNullOrWhiteSpace(newName))
            {
                Console.WriteLine("New Reservoir Name: " + newName);
                if (this.SelectedReservoir != null)
                {
                    this.SelectedReservoir.Name = newName;

                    var db = CrystalClearDB.GetInstance();
                    if (db == null)
                    {
                        return;
                    }

                    int rowAffected = db.UpdateReservoir(new Reservoir {
                        Id = SelectedReservoir.Id, Name = SelectedReservoir.Name
                    });
                    if (rowAffected == 1)
                    {
                        var reservoirs         = db.GetAllReservoirs();
                        var newReservoirModels = new ObservableCollection <ReservoirViewModel>();
                        foreach (var reservoir in reservoirs)
                        {
                            newReservoirModels.Add(new ReservoirViewModel(reservoir));
                        }

                        Reservoirs             = newReservoirModels;
                        this.SelectedReservoir = null;
                    }
                }
                else
                {
                    var db = CrystalClearDB.GetInstance();
                    if (db == null)
                    {
                        return;
                    }

                    int newId = db.AddReservoir(newName);
                    if (newId != -1)
                    {
                        var newReservoir = db.GetLastReservoir();
                        Reservoirs.Add(new ReservoirViewModel(newReservoir));
                    }
                }
            }
        }
        private void Save_OnClick(object sender, RoutedEventArgs e)
        {
            var db = CrystalClearDB.GetInstance();

            if (db == null)
            {
                return;
            }

            var viewModel = DataContext as AnalyzerViewModel;

            var newRecord = new Record();

            newRecord.Temperature = viewModel.Temperature.Temperature;
            newRecord.PH          = double.Parse(viewModel.PH);
            newRecord.DO          = double.Parse(viewModel.DO);
            newRecord.BOD5        = double.Parse(viewModel.BOD5);
            newRecord.COD         = double.Parse(viewModel.COD);
            newRecord.NH4N        = double.Parse(viewModel.NH4N);
            newRecord.NO2N        = double.Parse(viewModel.NO2N);
            newRecord.NO3N        = double.Parse(viewModel.NO3N);
            newRecord.SS          = double.Parse(viewModel.SS);
            newRecord.CL          = double.Parse(viewModel.CL);
            newRecord.CB          = double.Parse(viewModel.CB);
            newRecord.Overall     = double.Parse(viewModel.OverallIndex);
            newRecord.Level       = int.Parse(viewModel.Level);
            newRecord.ReservoirId = viewModel.Reservoir.Id;
            newRecord.DateTime    = viewModel.Date.ToString("yyyy-MM-dd");

            if (viewModel.ID == -1)
            {
                // New Record
                // Save
                int newId = db.AddRecord(newRecord);
                if (newId != -1)
                {
                    var lastRecord = db.GetLastRecord();
                    viewModel.ID       = lastRecord.Id;
                    SaveButton.Content = "Update";
                }
                else
                {
                    viewModel.ShowMessageCommand.Execute("Something went wrong. Please try it again.");
                }
            }
            else
            {
                // Existing Record
                // Update
                newRecord.Id = viewModel.ID;
                int rowAffected = db.UpdateRecord(newRecord);
                if (rowAffected != 1)
                {
                    viewModel.ShowMessageCommand.Execute("Something went wrong. Please try it again.");
                }
            }
        }
        private void Save_OnClick(object sender, RoutedEventArgs e)
        {
            var db = CrystalClearDB.GetInstance();

            if (db == null)
            {
                return;
            }

            var viewModel = DataContext as RecordManagerViewModel;

            if (viewModel.ID == -1)
            {
                // Shouldn't reach here.
                viewModel.ShowMessageCommand.Execute("Something odd happened. Please try it again.");
                return;
            }

            var updatedRecord = new Record();

            updatedRecord.Id          = viewModel.ID;
            updatedRecord.Temperature = viewModel.Temperature.Temperature;
            updatedRecord.PH          = double.Parse(viewModel.PH);
            updatedRecord.DO          = double.Parse(viewModel.DO);
            updatedRecord.BOD5        = double.Parse(viewModel.BOD5);
            updatedRecord.COD         = double.Parse(viewModel.COD);
            updatedRecord.NH4N        = double.Parse(viewModel.NH4N);
            updatedRecord.NO2N        = double.Parse(viewModel.NO2N);
            updatedRecord.NO3N        = double.Parse(viewModel.NO3N);
            updatedRecord.SS          = double.Parse(viewModel.SS);
            updatedRecord.CL          = double.Parse(viewModel.CL);
            updatedRecord.CB          = double.Parse(viewModel.CB);
            updatedRecord.Overall     = double.Parse(viewModel.OverallIndex);
            updatedRecord.Level       = int.Parse(viewModel.Level);
            updatedRecord.ReservoirId = viewModel.Reservoir.Id;
            updatedRecord.DateTime    = viewModel.Date.ToString("yyyy-MM-dd");

            int rowAffected = db.UpdateRecord(updatedRecord);

            if (rowAffected != 1)
            {
                viewModel.ShowMessageCommand.Execute("Something went wrong. Please try it again.");
            }
            else
            {
                viewModel.ShowMessageCommand.Execute("It's been updated successfully.");

                // Refresh Data
                viewModel.ID             = -1;
                AnalyzerPanel.Visibility = Visibility.Collapsed;
                SaveButton.Visibility    = Visibility.Collapsed;

                ReservoirComboBox_SelectionChanged(null, null);
            }
        }
        private void ReservoirComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var SelectedItem = ReservoirComboBox.SelectedItem as Reservoir;

            if (SelectedItem == null)
            {
                return;
            }

            if (SelectedItem.Id == -1)
            {
                // All
                var db = CrystalClearDB.GetInstance();
                if (db == null)
                {
                    return;
                }

                var viewModel = (RecordManagerViewModel)DataContext;

                var allRecords   = db.GetAllRecords();
                var recordModels = new ObservableCollection <RecordViewModel>();
                foreach (var record in allRecords)
                {
                    recordModels.Add(new RecordViewModel(record));
                }

                viewModel.Records       = recordModels;
                viewModel.BackupRecords = recordModels.ToList <RecordViewModel>();
            }
            else
            {
                // by Reservoir
                var db = CrystalClearDB.GetInstance();
                if (db == null)
                {
                    return;
                }

                var viewModel = (RecordManagerViewModel)DataContext;

                var allRecords   = db.GetRecordsForReservoir(SelectedItem.Id);
                var recordModels = new ObservableCollection <RecordViewModel>();
                foreach (var record in allRecords)
                {
                    recordModels.Add(new RecordViewModel(record));
                }

                viewModel.Records       = recordModels;
                viewModel.BackupRecords = recordModels.ToList <RecordViewModel>();
            }
        }
Exemple #7
0
        public static SimpleIndices CalculateSimpleIndices(double Temperature, double Cph, double Cdo, double Cbod5, double Ccod, double Cnh4n, double Cno2n, double Cno3n, double Css, double Ccl, double Ccb)
        {
            var db = CrystalClearDB.GetInstance();

            if (db == null)
            {
                return(null);
            }

            var simpleIndices = new SimpleIndices();

            // Calculate simple indices
            // PH
            var avgEnvironmentalStandard = db.GetAverageEnvironmentalStandard();
            var SphAvg = (avgEnvironmentalStandard.PH2 + avgEnvironmentalStandard.PH1) / 2.0;
            var Sph    = avgEnvironmentalStandard.PH1;

            simpleIndices.Iph = (Cph - SphAvg) / (Sph - SphAvg);

            // DO
            var oxygenDO = db.GetOxygenDOForTemperature(Temperature);
            var Sdo      = avgEnvironmentalStandard.DO;

            simpleIndices.Ido = (oxygenDO.DO - Cdo) / (oxygenDO.DO - Sdo);

            // BOD5
            simpleIndices.Ibod5 = Cbod5 / avgEnvironmentalStandard.BOD5;

            // COD
            simpleIndices.Icod = Ccod / avgEnvironmentalStandard.COD;

            // NH4-N
            simpleIndices.Inh4n = Cnh4n / avgEnvironmentalStandard.NH4N;

            // NO2-N
            simpleIndices.Ino2n = Cno2n / avgEnvironmentalStandard.NO2N;

            // NO3-N
            simpleIndices.Ino3n = Cno3n / avgEnvironmentalStandard.NO3N;

            // SS
            simpleIndices.Iss = Css / avgEnvironmentalStandard.SS;

            // CL
            simpleIndices.Icl = Ccl / avgEnvironmentalStandard.CL;

            // CB
            simpleIndices.Icb = Ccb / avgEnvironmentalStandard.CB;

            return(simpleIndices);
        }
Exemple #8
0
        public static int GetLevel(double Temperature, double OverallIndex)
        {
            var db = CrystalClearDB.GetInstance();

            if (db == null)
            {
                return(0);
            }

            var weightIndices = db.GetWeightIndicesForTemperature(Temperature);

            var i = 0;

            while (i <= 4 && weightIndices[i].Overall < OverallIndex)
            {
                i++;
            }

            return(i + 1);
        }
Exemple #9
0
        private void DeleteReservoirs(object o)
        {
            var db = CrystalClearDB.GetInstance();

            if (db == null)
            {
                return;
            }

            if (this.SelectedReservoirs != null && this.SelectedReservoirs.Count > 0)
            {
                foreach (var model in this.SelectedReservoirs)
                {
                    db.DeleteReservoir(new Reservoir {
                        Id = model.Id, Name = model.Name
                    });
                    var index = Reservoirs.IndexOf(model);
                    Reservoirs.RemoveAt(index);
                }

                this.SelectedReservoirs = null;
            }
        }
        private void ReservoirManager_Loaded(object sender, RoutedEventArgs e)
        {
            Console.WriteLine("Reservoir Manager loaded");

            var db = CrystalClearDB.GetInstance();

            if (db == null)
            {
                return;
            }

            var reservoirs      = db.GetAllReservoirs();
            var reservoirModels = new ObservableCollection <ReservoirViewModel>();

            foreach (var reservoir in reservoirs)
            {
                var reservoirModel = new ReservoirViewModel(reservoir);
                reservoirModels.Add(reservoirModel);
            }

            var viewModel = (ReservoirManagerViewModel)DataContext;

            viewModel.Reservoirs = reservoirModels;
        }
        private void ExtendedClosingEventHandler(object sender, DialogClosingEventArgs eventArgs)
        {
            if ((bool)eventArgs.Parameter == false)
            {
                return;
            }

            ReservoirAddDialog dialog = eventArgs.Session.Content as ReservoirAddDialog;
            var newName = dialog.TextReservoirName.Text;

            if (!string.IsNullOrWhiteSpace(newName))
            {
                Console.WriteLine("New Reservoir Name: " + newName);

                var db = CrystalClearDB.GetInstance();
                if (db == null)
                {
                    return;
                }

                int newId = db.AddReservoir(newName);
                if (newId != -1)
                {
                    var reservoirs         = db.GetAllReservoirs();
                    var newReservoirModels = new ObservableCollection <Reservoir>();
                    foreach (var reservoir in reservoirs)
                    {
                        newReservoirModels.Add(reservoir);
                    }

                    Reservoirs = newReservoirModels;

                    ReservoirAdded("");
                }
            }
        }
        private void RecordManager_Loaded(object sender, RoutedEventArgs e)
        {
            Console.WriteLine("RecordManager loaded");

            var db = CrystalClearDB.GetInstance();

            if (db == null)
            {
                return;
            }

            var viewModel = (RecordManagerViewModel)DataContext;

            var allRecords   = db.GetAllRecords();
            var recordModels = new ObservableCollection <RecordViewModel>();

            foreach (var record in allRecords)
            {
                recordModels.Add(new RecordViewModel(record));
            }

            viewModel.Records = recordModels;

            var reservoirs = db.GetAllReservoirs();

            var reservoirModels = new ObservableCollection <Reservoir>(reservoirs);

            viewModel.Reservoirs = reservoirModels;
            viewModel.Reservoir  = null;

            var reservoirAll = new Reservoir {
                Id = -1, Name = "All", Deleted = false
            };

            reservoirs.Insert(0, reservoirAll);

            viewModel.ReservoirsForView = new ObservableCollection <Reservoir>(reservoirs);
            viewModel.ReservoirForView  = reservoirAll;

            viewModel.ViewMethod = viewModel.ViewMethods[0];

            viewModel.Date         = DateTime.Today;
            viewModel.Reservoir    = null;
            viewModel.Temperature  = null;
            viewModel.ID           = -1;
            viewModel.PH           = "";
            viewModel.DO           = "";
            viewModel.BOD5         = "";
            viewModel.COD          = "";
            viewModel.NH4N         = "";
            viewModel.NO2N         = "";
            viewModel.NO3N         = "";
            viewModel.SS           = "";
            viewModel.CL           = "";
            viewModel.CB           = "";
            viewModel.OverallIndex = "0.00000";
            viewModel.Level        = "0";
            viewModel.Explanation  = "";

            AnalyzerPanel.Visibility = Visibility.Collapsed;
            SaveButton.Visibility    = Visibility.Collapsed;
        }
Exemple #13
0
        private void Helper_Loaded(object sender, RoutedEventArgs e)
        {
            Console.WriteLine("Helper loaded");

            var db = CrystalClearDB.GetInstance();

            if (db == null)
            {
                return;
            }

            var viewModel = (HelperViewModel)DataContext;

            var standards = db.GetEnvironmentalStandards();
            var environmentalStandards = new ObservableCollection <EnvironmentalStandardViewModel>();

            foreach (var standard in standards)
            {
                environmentalStandards.Add(new EnvironmentalStandardViewModel
                {
                    Level = standard.Level.ToString("D"),
                    PH    = standard.PH1.ToString("F") + "~" + standard.PH2.ToString("F"),
                    DO    = standard.DO.ToString("F"),
                    BOD5  = standard.BOD5.ToString("F"),
                    COD   = standard.COD.ToString("F"),
                    NH4N  = standard.NH4N.ToString("F"),
                    NO2N  = standard.NO2N.ToString("F"),
                    NO3N  = standard.NO3N.ToString("F"),
                    SS    = standard.SS.ToString("F"),
                    CL    = standard.CL.ToString("F"),
                    CB    = standard.CB.ToString("F")
                });
            }

            viewModel.EnvironmentalStandards = environmentalStandards;

            var solubilities = db.GetOxygenSolubilities();
            var dos          = db.GetOxygenDOs();

            var oxygenSolubilities = new ObservableCollection <OxygenSolubilityViewModel>();

            for (int i = 0; i < 10; i++)
            {
                var solubility1 = solubilities[i];
                var solubility2 = solubilities[i + 11];
                var solubility3 = solubilities[i + 21];
                oxygenSolubilities.Add(new OxygenSolubilityViewModel {
                    Temperature1 = solubility1.Temperature.ToString("F0"),
                    DO1          = solubility1.DO.ToString("F2"),
                    Temperature2 = solubility2.Temperature.ToString("F0"),
                    DO2          = solubility2.DO.ToString("F2"),
                    Temperature3 = solubility3.Temperature.ToString("F0"),
                    DO3          = solubility3.DO.ToString("F2")
                });
            }
            var solubility = solubilities[10];

            oxygenSolubilities.Add(new OxygenSolubilityViewModel
            {
                Temperature1 = solubility.Temperature.ToString("F0"),
                DO1          = solubility.DO.ToString("F2"),
                Temperature2 = "",
                DO2          = "",
                Temperature3 = "",
                DO3          = ""
            });
            oxygenSolubilities.Add(new OxygenSolubilityViewModel
            {
                Temperature1 = "0~10°C",
                DO1          = "14.000",
                Temperature2 = "11~20°C",
                DO2          = "10.000",
                Temperature3 = "21~30°C",
                DO3          = "8.292"
            });

            viewModel.OxygenSolubilities = oxygenSolubilities;

            var individualIndicesFor10Celsius = db.GetIndividualIndicesFor10Celsius();
            var iIfor10 = new ObservableCollection <BaseIndex>(individualIndicesFor10Celsius);

            viewModel.IndividualIndicesFor10Celsius = iIfor10;

            var individualIndicesFor20Celsius = db.GetIndividualIndicesFor20Celsius();
            var iIfor20 = new ObservableCollection <BaseIndex>(individualIndicesFor20Celsius);

            viewModel.IndividualIndicesFor20Celsius = iIfor20;

            var individualIndicesFor30Celsius = db.GetIndividualIndicesFor30Celsius();
            var iIfor30 = new ObservableCollection <BaseIndex>(individualIndicesFor30Celsius);

            viewModel.IndividualIndicesFor30Celsius = iIfor30;

            var weightCoefficientsFor10Celsius = db.GetWeightCoefficientsFor10Celsius();
            var wCfor10 = new ObservableCollection <BaseIndex>(weightCoefficientsFor10Celsius);

            viewModel.WeightCoefficientsFor10Celsius = wCfor10;

            var weightCoefficientsFor20Celsius = db.GetWeightCoefficientsFor20Celsius();
            var wCfor20 = new ObservableCollection <BaseIndex>(weightCoefficientsFor20Celsius);

            viewModel.WeightCoefficientsFor20Celsius = wCfor20;

            var weightCoefficientsFor30Celsius = db.GetWeightCoefficientsFor30Celsius();
            var wCfor30 = new ObservableCollection <BaseIndex>(weightCoefficientsFor30Celsius);

            viewModel.WeightCoefficientsFor30Celsius = wCfor30;

            var weightIndicesFor10Celsius = db.GetWeightIndicesFor10Celsius();
            var wIfor10 = new ObservableCollection <BaseIndex>(weightIndicesFor10Celsius);

            viewModel.WeightIndicesFor10Celsius = wIfor10;

            var weightIndicesFor20Celsius = db.GetWeightIndicesFor20Celsius();
            var wIfor20 = new ObservableCollection <BaseIndex>(weightIndicesFor20Celsius);

            viewModel.WeightIndicesFor20Celsius = wIfor20;

            var weightIndicesFor30Celsius = db.GetWeightIndicesFor30Celsius();
            var wIfor30 = new ObservableCollection <BaseIndex>(weightIndicesFor30Celsius);

            viewModel.WeightIndicesFor30Celsius = wIfor30;
        }
Exemple #14
0
        public static WeightCoefficients GetWeightCoefficients(double Temperature, SimpleIndices CalculatedIndices)
        {
            var db = CrystalClearDB.GetInstance();

            if (db == null)
            {
                return(null);
            }

            var wks = new WeightCoefficients();

            var individualIndices  = db.GetIndividualIndicesForTemperature(Temperature);
            var weightCoefficients = db.GetWeightCoefficientsForTemperature(Temperature);

            // Get individual Weight Coefficient based on the Individual Indices, for calculated simple indices
            // PH
            var i   = 2; // index number, for Level 3
            var Iph = System.Math.Round(CalculatedIndices.Iph, 5, MidpointRounding.AwayFromZero);

            while (0 <= i && i <= 4)
            {
                if (Iph <= individualIndices[i].PH)
                {
                    if (i != 0)
                    {
                        if (individualIndices[i - 1].PH < Iph)
                        {
                            // Found a relevant Level
                            break;
                        }

                        i--;
                    }
                    else
                    {
                        // reached to Level 1
                        // Found
                        break;
                    }
                }
                else
                {
                    if (i != 4)
                    {
                        if (Iph < individualIndices[i + 1].PH)
                        {
                            // Found a relevant Level
                            i += 1;
                            break;
                        }

                        i++;
                    }
                    else
                    {
                        // reached to Level 5
                        // Found
                        break;
                    }
                }
            }

            wks.PH = weightCoefficients[i].PH;

            // DO
            i = 2; // index number, for Level 3
            var Ido = System.Math.Round(CalculatedIndices.Ido, 5, MidpointRounding.AwayFromZero);

            while (0 <= i && i <= 4)
            {
                if (Ido <= individualIndices[i].DO)
                {
                    if (i != 0)
                    {
                        if (individualIndices[i - 1].DO < Ido)
                        {
                            // Found a relevant Level
                            break;
                        }

                        i--;
                    }
                    else
                    {
                        // reached to Level 1
                        // Found
                        break;
                    }
                }
                else
                {
                    if (i != 4)
                    {
                        if (Ido < individualIndices[i + 1].DO)
                        {
                            // Found a relevant Level
                            i += 1;
                            break;
                        }

                        i++;
                    }
                    else
                    {
                        // reached to Level 5
                        // Found
                        break;
                    }
                }
            }

            wks.DO = weightCoefficients[i].DO;

            // BOD5
            i = 2; // index number, for Level 3
            var Ibod5 = System.Math.Round(CalculatedIndices.Ibod5, 5, MidpointRounding.AwayFromZero);

            while (0 <= i && i <= 4)
            {
                if (Ibod5 <= individualIndices[i].BOD5)
                {
                    if (i != 0)
                    {
                        if (individualIndices[i - 1].BOD5 < Ibod5)
                        {
                            // Found a relevant Level
                            break;
                        }

                        i--;
                    }
                    else
                    {
                        // reached to Level 1
                        // Found
                        break;
                    }
                }
                else
                {
                    if (i != 4)
                    {
                        if (Ibod5 < individualIndices[i + 1].BOD5)
                        {
                            // Found a relevant Level
                            i += 1;
                            break;
                        }

                        i++;
                    }
                    else
                    {
                        // reached to Level 5
                        // Found
                        break;
                    }
                }
            }

            wks.BOD5 = weightCoefficients[i].BOD5;

            // COD
            i = 2; // index number, for Level 3
            var Icod = System.Math.Round(CalculatedIndices.Icod, 5, MidpointRounding.AwayFromZero);

            while (0 <= i && i <= 4)
            {
                if (Icod <= individualIndices[i].COD)
                {
                    if (i != 0)
                    {
                        if (individualIndices[i - 1].COD < Icod)
                        {
                            // Found a relevant Level
                            break;
                        }

                        i--;
                    }
                    else
                    {
                        // reached to Level 1
                        // Found
                        break;
                    }
                }
                else
                {
                    if (i != 4)
                    {
                        if (Icod < individualIndices[i + 1].COD)
                        {
                            // Found a relevant Level
                            i += 1;
                            break;
                        }

                        i++;
                    }
                    else
                    {
                        // reached to Level 5
                        // Found
                        break;
                    }
                }
            }

            wks.COD = weightCoefficients[i].COD;

            // NH4-N
            i = 2; // index number, for Level 3
            var Inh4n = System.Math.Round(CalculatedIndices.Inh4n, 5, MidpointRounding.AwayFromZero);

            while (0 <= i && i <= 4)
            {
                if (Inh4n <= individualIndices[i].NH4N)
                {
                    if (i != 0)
                    {
                        if (individualIndices[i - 1].NH4N < Inh4n)
                        {
                            // Found a relevant Level
                            break;
                        }

                        i--;
                    }
                    else
                    {
                        // reached to Level 1
                        // Found
                        break;
                    }
                }
                else
                {
                    if (i != 4)
                    {
                        if (Inh4n < individualIndices[i + 1].NH4N)
                        {
                            // Found a relevant Level
                            i += 1;
                            break;
                        }

                        i++;
                    }
                    else
                    {
                        // reached to Level 5
                        // Found
                        break;
                    }
                }
            }

            wks.NH4N = weightCoefficients[i].NH4N;

            // NO2-N
            i = 2; // index number, for Level 3
            var Ino2n = System.Math.Round(CalculatedIndices.Ino2n, 5, MidpointRounding.AwayFromZero);

            while (0 <= i && i <= 4)
            {
                if (Ino2n <= individualIndices[i].NO2N)
                {
                    if (i != 0)
                    {
                        if (individualIndices[i - 1].NO2N < Ino2n)
                        {
                            // Found a relevant Level
                            break;
                        }

                        i--;
                    }
                    else
                    {
                        // reached to Level 1
                        // Found
                        break;
                    }
                }
                else
                {
                    if (i != 4)
                    {
                        if (Ino2n < individualIndices[i + 1].NO2N)
                        {
                            // Found a relevant Level
                            i += 1;
                            break;
                        }

                        i++;
                    }
                    else
                    {
                        // reached to Level 5
                        // Found
                        break;
                    }
                }
            }

            wks.NO2N = weightCoefficients[i].NO2N;

            // NO3-N
            i = 2; // index number, for Level 3
            var Ino3n = System.Math.Round(CalculatedIndices.Ino3n, 5, MidpointRounding.AwayFromZero);

            while (0 <= i && i <= 4)
            {
                if (Ino2n <= individualIndices[i].NO3N)
                {
                    if (i != 0)
                    {
                        if (individualIndices[i - 1].NO3N < Ino3n)
                        {
                            // Found a relevant Level
                            break;
                        }

                        i--;
                    }
                    else
                    {
                        // reached to Level 1
                        // Found
                        break;
                    }
                }
                else
                {
                    if (i != 4)
                    {
                        if (Ino3n < individualIndices[i + 1].NO3N)
                        {
                            // Found a relevant Level
                            i += 1;
                            break;
                        }

                        i++;
                    }
                    else
                    {
                        // reached to Level 5
                        // Found
                        break;
                    }
                }
            }

            wks.NO3N = weightCoefficients[i].NO3N;

            // SS
            i = 2; // index number, for Level 3
            var Iss = System.Math.Round(CalculatedIndices.Iss, 5, MidpointRounding.AwayFromZero);

            while (0 <= i && i <= 4)
            {
                if (Iss <= individualIndices[i].SS)
                {
                    if (i != 0)
                    {
                        if (individualIndices[i - 1].SS < Iss)
                        {
                            // Found a relevant Level
                            break;
                        }

                        i--;
                    }
                    else
                    {
                        // reached to Level 1
                        // Found
                        break;
                    }
                }
                else
                {
                    if (i != 4)
                    {
                        if (Iss < individualIndices[i + 1].SS)
                        {
                            // Found a relevant Level
                            i += 1;
                            break;
                        }

                        i++;
                    }
                    else
                    {
                        // reached to Level 5
                        // Found
                        break;
                    }
                }
            }

            wks.SS = weightCoefficients[i].SS;

            // CL
            i = 2; // index number, for Level 3
            var Icl = System.Math.Round(CalculatedIndices.Icl, 5, MidpointRounding.AwayFromZero);

            while (0 <= i && i <= 4)
            {
                if (Icl <= individualIndices[i].CL)
                {
                    if (i != 0)
                    {
                        if (individualIndices[i - 1].CL < Icl)
                        {
                            // Found a relevant Level
                            break;
                        }

                        i--;
                    }
                    else
                    {
                        // reached to Level 1
                        // Found
                        break;
                    }
                }
                else
                {
                    if (i != 4)
                    {
                        if (Icl < individualIndices[i + 1].CL)
                        {
                            // Found a relevant Level
                            i += 1;
                            break;
                        }

                        i++;
                    }
                    else
                    {
                        // reached to Level 5
                        // Found
                        break;
                    }
                }
            }

            wks.CL = weightCoefficients[i].CL;

            // CB
            i = 2; // index number, for Level 3
            var Icb = System.Math.Round(CalculatedIndices.Icb, 5, MidpointRounding.AwayFromZero);

            while (0 <= i)
            {
                if (Icb <= individualIndices[i].CB)
                {
                    if (i != 0)
                    {
                        if (individualIndices[i - 1].CB < Icb)
                        {
                            // Found a relevant Level
                            break;
                        }

                        i--;
                    }
                    else
                    {
                        // reached to Level 1
                        // Found
                        break;
                    }
                }
                else
                {
                    // For CB, comparison is only relevant till Level 3.
                    // FOR CB above Level 3, always choose Level 4, which is close to Level 3.
                    i += 1;
                    break;
                }
            }

            wks.CB = weightCoefficients[i].CB;

            return(wks);
        }
        private void Analyzer_Loaded(object sender, RoutedEventArgs e)
        {
            Console.WriteLine("Analyzer loaded");

            var db = CrystalClearDB.GetInstance();

            if (db == null)
            {
                return;
            }

            var reservoirs      = db.GetAllReservoirs();
            var reservoirModels = new ObservableCollection <Reservoir>();

            foreach (var reservoir in reservoirs)
            {
                reservoirModels.Add(reservoir);
            }

            var viewModel = (AnalyzerViewModel)DataContext;

            viewModel.Reservoirs = reservoirModels;

            if (viewModel.Reservoirs.Count == 0)
            {
                // No reservoir
                // User should add one
                ReservoirComboBox.Visibility = Visibility.Collapsed;
                AddButton.Visibility         = Visibility.Visible;
                AnalyzeButton.Visibility     = Visibility.Collapsed;

                viewModel.ShowMessageCommand.Execute("Please add a reservoir to start the analysis");
            }
            else
            {
                // There are some
                ReservoirComboBox.Visibility = Visibility.Visible;
                AddButton.Visibility         = Visibility.Collapsed;
                AnalyzeButton.Visibility     = Visibility.Visible;
            }

            viewModel.Date         = DateTime.Today;
            viewModel.Reservoir    = null;
            viewModel.Temperature  = null;
            viewModel.ID           = -1;
            viewModel.PH           = "";
            viewModel.DO           = "";
            viewModel.BOD5         = "";
            viewModel.COD          = "";
            viewModel.NH4N         = "";
            viewModel.NO2N         = "";
            viewModel.NO3N         = "";
            viewModel.SS           = "";
            viewModel.CL           = "";
            viewModel.CB           = "";
            viewModel.OverallIndex = "0.00000";
            viewModel.Level        = "0";
            viewModel.Explanation  = "";

            ((AnalyzerViewModel)DataContext).ReservoirAdded += ReservoirAddedHandler;
        }