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(); } }
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); }
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()); }
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); }
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(); }
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"); }
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); }