Exemple #1
0
        public App()
        {
            // Set invariant culture on main thread
            RegionalCulture = Thread.CurrentThread.CurrentCulture;
            Thread.CurrentThread.CurrentCulture = RegionalCulture;

            // Make sure some special folders exist
            if (!Directory.Exists(PhotoVisDataRoot))
            {
                Directory.CreateDirectory(PhotoVisDataRoot);
            }
            if (!Directory.Exists(ProjctsDataRoot))
            {
                Directory.CreateDirectory(ProjctsDataRoot);
            }

            // Create the database if it does not exist
            DatabaseInitializer init = new DatabaseInitializer();

            init.CreateDatabase();

            // Try to establish DB connection
            try
            {
                DB = new DatabaseConnection();
            }
            catch
            {
                MessageBox.Show("Fatal error, could not connect to database.");
                Application.Current.Shutdown();
            }
        }
Exemple #2
0
        public void EnsureCanMigrate_CheckAllSubPopsHaveTDV_HasTDVs()
        {
            var v3Path = GetTempFilePathWithExt(".crz3");

            var init = new DatabaseInitializer
            {
                TreeDefaults = new[]
                {
                    new TreeDefaultValue {
                        SpeciesCode = "sp1", PrimaryProduct = "01"
                    },
                    new TreeDefaultValue {
                        SpeciesCode = "sp2", PrimaryProduct = "01"
                    },
                    new TreeDefaultValue {
                        SpeciesCode = "sp3", PrimaryProduct = "01"
                    },
                }
            };

            using var v3db = init.CreateDatabase();

            var result = DownMigrator.CheckAllSubPopsHavTDV(init.CruiseID, v3db);

            result.Should().BeEmpty();
        }
        public void ThreePPNT_FieldCheck()
        {
            var init = new DatabaseInitializer();

            using var db = init.CreateDatabase();

            var stratum = init.PlotStrata.First();
            var unit    = init.Units.First();

            var plot = new Plot()
            {
                CruiseID        = init.CruiseID,
                PlotID          = Guid.NewGuid().ToString(),
                PlotNumber      = 1,
                CuttingUnitCode = unit
            };

            db.Insert(plot);

            var plotStratum = new Plot_Stratum()
            {
                CruiseID        = init.CruiseID,
                PlotNumber      = plot.PlotNumber,
                CuttingUnitCode = unit,
                StratumCode     = stratum.StratumCode,
            };

            db.Insert(plotStratum);

            plotStratum.AverageHeight = 1;
            plotStratum.KPI           = 1;
            plotStratum.TreeCount     = 1;
            db.Update(plotStratum);
        }
Exemple #4
0
        public void Read_With_TDV()
        {
            var init = new DatabaseInitializer
            {
                TreeDefaults = null,
            };

            using var db = init.CreateDatabase();

            var tree = new Tree
            {
                CruiseID        = init.CruiseID,
                TreeID          = Guid.NewGuid().ToString(),
                TreeNumber      = 1,
                CuttingUnitCode = "u1",
                StratumCode     = "st1",
                SampleGroupCode = "sg1",
                SpeciesCode     = "sp1",
                LiveDead        = "L",
            };

            db.Insert(tree);

            var tm = new TreeMeasurment
            {
                TreeID = tree.TreeID,
            };

            db.Insert(tm);

            var tdv = new AutoFaker <TreeDefaultValue>()
                      .Ignore(x => x.TreeDefaultValue_CN)
                      .Ignore(x => x.CreatedBy)
                      .Ignore(x => x.Created_TS)
                      .Ignore(x => x.ModifiedBy)
                      .Ignore(x => x.Modified_TS)
                      .RuleFor(x => x.CruiseID, y => init.CruiseID)
                      .Generate();

            tdv.CruiseID       = init.CruiseID;
            tdv.SpeciesCode    = "sp1";
            tdv.PrimaryProduct = "01";

            db.Insert(tdv);

            var tm_defaults = db.From <TreeMeasurment_DefaultResolved>().Query().Single();

            tm_defaults.Should().NotBeNull();

            tm_defaults.FormClass.Should().Be(tdv.FormClass.ToString());
            tm_defaults.Grade.Should().Be(tdv.TreeGrade);
            tm_defaults.HiddenPrimary.Should().Be(tdv.HiddenPrimary.ToString());
            tm_defaults.RecoverablePrimary.Should().Be(tdv.Recoverable.ToString());
        }
Exemple #5
0
        public void UpdateStratumCodeCascade()
        {
            var init = new DatabaseInitializer();

            using var db = init.CreateDatabase();

            var tree = new Tree
            {
                CruiseID        = init.CruiseID,
                TreeID          = Guid.NewGuid().ToString(),
                TreeNumber      = 1,
                CuttingUnitCode = "u1",
                StratumCode     = "st1",
                SampleGroupCode = "sg1",
            };

            db.Insert(tree);

            var tl = new TallyLedger
            {
                CruiseID        = init.CruiseID,
                TallyLedgerID   = Guid.NewGuid().ToString(),
                CuttingUnitCode = "u1",
                StratumCode     = "st1",
                SampleGroupCode = "sg1",
                TreeID          = tree.TreeID,
            };

            db.Insert(tl);

            var unitStratum = db.From <CuttingUnit_Stratum>().Where("StratumCode = 'st1'").Query().First();

            var stratum = db.From <Stratum>().Where("StratumCode = 'st1'").Query().Single();

            stratum.StratumCode = "st101";
            db.Update(stratum);

            var unitStratumAgain = db.From <CuttingUnit_Stratum>().Where("CuttingUnit_Stratum_CN = @p1").Query(unitStratum.CuttingUnit_Stratum_CN).Single();

            unitStratumAgain.StratumCode.Should().Be(stratum.StratumCode);

            var tlAgain = db.From <TallyLedger>().Query().First();

            tlAgain.StratumCode.Should().Be(stratum.StratumCode);

            var treeAgain = db.From <Tree>().Query().First();

            treeAgain.StratumCode.Should().Be(stratum.StratumCode);
        }
Exemple #6
0
        public void EnsureCanMigrate_CheckAllSubPopsHaveTDV_DoesntHasTDVs()
        {
            var v3Path = GetTempFilePathWithExt(".crz3");

            var init = new DatabaseInitializer
            {
                TreeDefaults = new TreeDefaultValue[] { },
            };

            using var v3db = init.CreateDatabase();

            var result = DownMigrator.CheckAllSubPopsHavTDV(init.CruiseID, v3db);

            result.Should().NotBeNullOrEmpty();
        }
Exemple #7
0
        public void Read_With_FieldSetup()
        {
            var init = new DatabaseInitializer
            {
                TreeDefaults = null,
            };

            using var db = init.CreateDatabase();

            var tree = new Tree
            {
                CruiseID        = init.CruiseID,
                TreeID          = Guid.NewGuid().ToString(),
                TreeNumber      = 1,
                CuttingUnitCode = "u1",
                StratumCode     = "st1",
                SampleGroupCode = "sg1",
                SpeciesCode     = "sp1",
                LiveDead        = "L",
            };

            db.Insert(tree);

            var tm = new TreeMeasurment
            {
                TreeID = tree.TreeID,
            };

            db.Insert(tm);

            var tfs = new TreeFieldSetup
            {
                CruiseID         = init.CruiseID,
                Field            = "DBH",
                StratumCode      = "st1",
                SampleGroupCode  = "sg1",
                DefaultValueReal = 101.3,
            };

            db.Insert(tfs);

            var tm_defaults = db.From <TreeMeasurment_DefaultResolved>().Query().Single();

            tm_defaults.Should().NotBeNull();

            tm_defaults.DBH.Should().Be("101.3");
        }
Exemple #8
0
        public void Update_Tree_Species_Cascades_To_TallyLedger_TallyBySg()
        {
            var init = new DatabaseInitializer();

            using var db = init.CreateDatabase();

            var tree = new Tree
            {
                CruiseID        = init.CruiseID,
                TreeID          = Guid.NewGuid().ToString(),
                TreeNumber      = 1,
                CuttingUnitCode = "u1",
                StratumCode     = "st1",
                SampleGroupCode = "sg1",
                //SpeciesCode = "sp1",
                //LiveDead = "L",
            };

            db.Insert(tree);

            var tl = new TallyLedger
            {
                CruiseID        = init.CruiseID,
                TallyLedgerID   = Guid.NewGuid().ToString(),
                CuttingUnitCode = "u1",
                StratumCode     = "st1",
                SampleGroupCode = "sg1",
                //SpeciesCode = "sp1",
                //LiveDead = "L",
                TreeID = tree.TreeID,
            };

            db.Insert(tl);


            tree.SpeciesCode = "sp2";
            tree.LiveDead    = "D";
            db.Update(tree);

            var tlAgain = db.From <TallyLedger>().Query().First();

            tlAgain.SpeciesCode.Should().Be(tree.SpeciesCode);
            tlAgain.LiveDead.Should().Be(tree.LiveDead);
        }
        public void RunDelete_WithData(string tableName)
        {
            var skipTables = new[]
            {
                "LK_CruiseMethod",
                "LK_Product",
                "LK_Purpose",
                "LK_Region",
                "LK_UOM",
                "Species",
                "TreeField",
            };

            // some tables don't have cascading deletes so we need to skip them
            Skip.If(skipTables.Contains(tableName));

            var initializer = new DatabaseInitializer();

            using (var database = initializer.CreateDatabase())
            {
                database.Invoking(x => x.Execute($"DELETE FROM {tableName};"))
                .Should().NotThrow();
            }
        }
        public void UpdatePlotNumberCascade()
        {
            var init = new DatabaseInitializer();

            using var db = init.CreateDatabase();

            var plot = new Plot
            {
                CruiseID        = init.CruiseID,
                PlotID          = Guid.NewGuid().ToString(),
                PlotNumber      = 1,
                CuttingUnitCode = "u1",
            };

            db.Insert(plot);

            var plotStratum = new Plot_Stratum
            {
                CruiseID        = init.CruiseID,
                PlotNumber      = 1,
                StratumCode     = "st1",
                CuttingUnitCode = "u1",
            };

            db.Insert(plotStratum);

            var tree = new Tree
            {
                CruiseID        = init.CruiseID,
                TreeID          = Guid.NewGuid().ToString(),
                TreeNumber      = 1,
                CuttingUnitCode = "u1",
                PlotNumber      = 1,
                StratumCode     = "st1",
                SampleGroupCode = "sg1",
            };

            db.Insert(tree);

            var tl = new TallyLedger
            {
                CruiseID        = init.CruiseID,
                TallyLedgerID   = Guid.NewGuid().ToString(),
                CuttingUnitCode = "u1",
                PlotNumber      = 1,
                StratumCode     = "st1",
                SampleGroupCode = "sg1",
                TreeID          = tree.TreeID,
            };

            db.Insert(tl);

            plot.PlotNumber = 2;
            db.Update(plot);

            var tlAgain = db.From <TallyLedger>().Query().First();

            tlAgain.PlotNumber.Should().Be(plot.PlotNumber);

            var treeAgain = db.From <Tree>().Query().First();

            treeAgain.PlotNumber.Should().Be(plot.PlotNumber);
        }
        public void ReadTreeAuditErrors_With_Two_AuditRules()
        {
            var init = new DatabaseInitializer();

            using var db = init.CreateDatabase();

            var tree = new Tree
            {
                CruiseID        = init.CruiseID,
                TreeID          = Guid.NewGuid().ToString(),
                TreeNumber      = 1,
                CuttingUnitCode = "u1",
                StratumCode     = "st3",
                SampleGroupCode = "sg1",
                SpeciesCode     = "sp1",
                CountOrMeasure  = "M",
                LiveDead        = "L",
            };

            db.Insert(tree);

            var tm = new TreeMeasurment
            {
                TreeID = tree.TreeID,
                DBH    = 101,
            };

            db.Insert(tm);

            var tar = new TreeAuditRule
            {
                CruiseID        = init.CruiseID,
                TreeAuditRuleID = Guid.NewGuid().ToString(),
                Field           = "DBH",
                Max             = 100,
            };

            db.Insert(tar);

            var tars = new TreeAuditRuleSelector
            {
                CruiseID        = init.CruiseID,
                TreeAuditRuleID = tar.TreeAuditRuleID,
                SpeciesCode     = "sp1",
                PrimaryProduct  = "01",
                LiveDead        = "L",
            };

            db.Insert(tars);

            var tfs = new TreeFieldSetup
            {
                CruiseID    = init.CruiseID,
                Field       = "DBH",
                StratumCode = "st3",
            };

            db.Insert(tfs);

            var tar2 = new TreeAuditRule
            {
                CruiseID        = init.CruiseID,
                TreeAuditRuleID = Guid.NewGuid().ToString(),
                Field           = "DBH",
                Max             = 99,
            };

            db.Insert(tar2);

            var tars2 = new TreeAuditRuleSelector
            {
                CruiseID        = init.CruiseID,
                TreeAuditRuleID = tar.TreeAuditRuleID,
                SpeciesCode     = "sp1",
            };

            db.Insert(tars2);

            var taeRecords = db.QueryGeneric("SELECT * FROM TreeAuditError").ToArray();

            taeRecords.Should().HaveCount(1); // not sure how to make TreeAuditErrors return only one error per tree, but its a low impact issue
        }
        public void ReadTallyPop_Not3P_Test(string method)
        {
            var sts = new[]
            {
                new Stratum
                {
                    StratumID   = Guid.NewGuid().ToString(),
                    StratumCode = "st101",
                    Method      = method,
                },
            };

            var unitSt = new[]
            {
                new CuttingUnit_Stratum
                {
                    CuttingUnitCode = "u1",
                    StratumCode     = sts[0].StratumCode,
                },
            };

            var sgs = new[]
            {
                new SampleGroup
                {
                    SampleGroupID   = Guid.NewGuid().ToString(),
                    StratumCode     = sts[0].StratumCode,
                    SampleGroupCode = "sg101",
                },
            };

            var subpops = new[]
            {
                new SubPopulation
                {
                    SubPopulationID = Guid.NewGuid().ToString(),
                    StratumCode     = sts[0].StratumCode,
                    SampleGroupCode = sgs[0].SampleGroupCode,
                    SpeciesCode     = "sp1",
                    LiveDead        = "L",
                },

                new SubPopulation
                {
                    SubPopulationID = Guid.NewGuid().ToString(),
                    StratumCode     = sts[0].StratumCode,
                    SampleGroupCode = sgs[0].SampleGroupCode,
                    SpeciesCode     = "sp2",
                    LiveDead        = "L",
                },
            };

            var init = new DatabaseInitializer()
            {
                Strata       = sts,
                UnitStrata   = unitSt,
                SampleGroups = sgs,
                Subpops      = subpops,
                TreeDefaults = null,
            };

            using var db = init.CreateDatabase();

            //var sgAgain = db.From<SampleGroup>().Where("CruiseID = @p1 ").Query(init.CruiseID).ToArray();
            //sgAgain.Should().OnlyContain(x => x.TallyBySubPop == false);


            var subPops = db.From <TallyPopulation>().Where("CruiseID = @p1 ").Query(init.CruiseID).ToArray();

            subPops.Should().HaveCount(1);
            subPops.Should().OnlyContain(x => x.SpeciesCode == null);
        }