コード例 #1
0
        public void ToStringTest()
        {
            var tallyAction = new TallyAction();

            tallyAction.ToString().Should().NotBeNullOrWhiteSpace();
            tallyAction.ToString().Should().Be("-- ----");

            tallyAction.Count = new CountTree();

            tallyAction.ToString().Should().NotBeNullOrWhiteSpace();
            tallyAction.ToString().Should().Be("-- ----");

            tallyAction.Count.SampleGroup = new SampleGroup()
            {
                Code = "1111111", Stratum = new Stratum()
                {
                    Code = "222"
                }
            };

            tallyAction.ToString().Should().NotBeNullOrWhiteSpace();
            tallyAction.ToString().Should().Be("22 1111");

            tallyAction.Count.SampleGroup.Code         = "1";
            tallyAction.Count.SampleGroup.Stratum.Code = "2";

            tallyAction.ToString().Should().NotBeNullOrWhiteSpace();
            tallyAction.ToString().Should().Be("2 1");
        }
コード例 #2
0
        [InlineData("st3", "sg1", "sp1", "L", SampleResult.I)] // tally by subpop - insurance
        public void InsertTallyAction(string stratumCode, string sgCode, string species, string liveDead, SampleResult sampleResult)
        {
            var unitCode  = "u1";
            var treeCount = 50;

            using (var database = CreateDatabase())
            {
                var datastore = new TallyDataservice(database, CruiseID, TestDeviceInfoService.TEST_DEVICEID, new SamplerInfoDataservice(database, CruiseID, TestDeviceInfoService.TEST_DEVICEID));
                var tpds      = new TallyPopulationDataservice(database, CruiseID, TestDeviceInfoService.TEST_DEVICEID);
                var cuds      = new CuttingUnitDatastore(database, CruiseID, TestDeviceInfoService.TEST_DEVICEID, new SamplerInfoDataservice(database, CruiseID, TestDeviceInfoService.TEST_DEVICEID));

                var tallyPops = database.QueryGeneric($"Select * from TallyPopulation WHERE StratumCode = '{stratumCode}';")
                                .ToArray();

                var pop = tpds.GetTallyPopulation(unitCode, stratumCode, sgCode, species, liveDead);

                pop.Should().NotBeNull();

                var tallyAction = new TallyAction(unitCode, pop)
                {
                    SampleResult = sampleResult,
                    TreeCount    = treeCount,
                };

                var entry = datastore.InsertTallyAction(tallyAction);

                entry.TallyLedgerID.Should().NotBeEmpty();

                ValidateTallyEntry(entry, sampleResult == SampleResult.M || sampleResult == SampleResult.I);

                var entryAgain = datastore.GetTallyEntry(entry.TallyLedgerID);

                ValidateTallyEntry(entryAgain, sampleResult == SampleResult.M || sampleResult == SampleResult.I);

                //var tree = database.From<Tree>().Where("TreeID = @p1").Query(entry.TreeID).FirstOrDefault();

                if (sampleResult == SampleResult.M || sampleResult == SampleResult.I)
                {
                    var tree = cuds.GetTree(entry.TreeID);

                    tree.Should().NotBeNull();

                    tree.TreeID.Should().Be(entry.TreeID);
                    tree.StratumCode.Should().Be(stratumCode);
                    tree.SampleGroupCode.Should().Be(sgCode);
                    tree.SpeciesCode.Should().Be(pop.SpeciesCode);
                    tree.LiveDead.Should().Be(pop.LiveDead);
                    tree.CountOrMeasure.Should().Be(sampleResult.ToString());
                }

                var tallyPopulate = tpds.GetTallyPopulationsByUnitCode(unitCode).Where(x => (x.SpeciesCode ?? "") == (species ?? "")).Single();

                tallyPopulate.TreeCount.Should().Be(treeCount);
            }
        }
コード例 #3
0
        public void RemoveAt_Test()
        {
            var tallyHistoryCollection = new TallyHistoryCollection(1);

            var ta1 = new TallyAction();

            tallyHistoryCollection.Add(ta1);

            using (var monitoredTallyHistoryCollection = tallyHistoryCollection.Monitor())
            {
                tallyHistoryCollection.RemoveAt(0);
                monitoredTallyHistoryCollection.Should().Raise(nameof(TallyHistoryCollection.ItemRemoving));
            }
        }
コード例 #4
0
        private static TallyAction CreateTally(string unitCode, TallyPopulation population,
                                               SampleResult sampleResult, int treeCount = 1, int kpi = 0, int threePRandomeValue = 0, bool stm = false)
        {
            var tallyEntry = new TallyAction(unitCode, population)
            {
                SampleResult = sampleResult,
                //CountOrMeasure = countOrMeasure,
                TreeCount         = treeCount,
                KPI               = kpi,
                ThreePRandomValue = threePRandomeValue,
                STM               = stm,
            };

            return(tallyEntry);
        }
コード例 #5
0
        public void InflateTest()
        {
            using (var dataStore = new CruiseDAL.DAL())
            {
                dataStore.Insert(new CuttingUnit()
                {
                    Code = "01", CuttingUnit_CN = 1
                });
                dataStore.Insert(new Stratum()
                {
                    Code = "01", Method = "", Stratum_CN = 1
                });
                dataStore.Insert(new SampleGroup()
                {
                    Code = "01", CutLeave = "", UOM = "", Stratum_CN = 1, SampleGroup_CN = 1, PrimaryProduct = "01"
                });
                dataStore.Insert(new CruiseDAL.DataObjects.TallyDO()
                {
                    Tally_CN = 1, Hotkey = "", Description = ""
                });

                dataStore.Insert(new Tree()
                {
                    TreeNumber = 1, Tree_CN = 1, CuttingUnit_CN = 1, Stratum_CN = 1
                });
                dataStore.Insert(new CountTree()
                {
                    CountTree_CN = 1, CuttingUnit_CN = 1, SampleGroup_CN = 1
                });
                dataStore.Insert(new CruiseDAL.DataObjects.TreeEstimateDO()
                {
                    CountTree_CN = 1
                });

                var tallyAction = new TallyAction()
                {
                    TreeCN = 1, CountCN = 1, TreeEstimateCN = 1
                };

                TallyHistoryCollection.Inflate(dataStore, tallyAction);

                tallyAction.TreeRecord.Should().NotBeNull();
                tallyAction.Count.Should().NotBeNull();
                tallyAction.TreeEstimate.Should().NotBeNull();
            }
        }
コード例 #6
0
        public void Add_Test_WithLimitedSize()
        {
            var tallHistoryCollection = new TallyHistoryCollection(1);

            var ta1 = new TallyAction();

            tallHistoryCollection.Add(ta1);

            tallHistoryCollection.Should().HaveCount(1);

            var ta2 = new TallyAction();

            tallHistoryCollection.Add(ta2);
            tallHistoryCollection.Should().HaveCount(1);
            tallHistoryCollection.Should().Contain(ta2);
            tallHistoryCollection.Should().NotContain(ta1);
        }
コード例 #7
0
        public void SaveTallyAction(TallyAction tallyAction)
        {
            var database = DataStore;

            var countTree = tallyAction.Count;
            var tree      = tallyAction.TreeRecord;

            var persistedTreeCount = countTree.TreeCount;
            var persistedSumKPI    = countTree.SumKPI;
            var treeCountDelta     = tallyAction.TreeCount;
            var kpiDelta           = tallyAction.KPI;

            if (treeCountDelta > 0)
            {
                countTree.TreeCount = persistedTreeCount + treeCountDelta;
            }
            if (kpiDelta > 0)
            {
                countTree.SumKPI = persistedSumKPI + kpiDelta;
            }

            database.BeginTransaction();
            try
            {
                database.Save(countTree);

                if (tree != null)
                {
                    database.Save(tree);
                }

                database.CommitTransaction();

                if (tree != null)
                {
                    AddNonPlotTree(tree);
                }
            }
            catch (Exception)
            {
                countTree.TreeCount = persistedTreeCount;
                countTree.SumKPI    = persistedSumKPI;
                database.RollbackTransaction();
            }
        }
コード例 #8
0
        //ViewController (askKPI) //TODO use Dialog Service instead
        //DataService (CreateNewTreeEntry)
        //DAL (LogTreeEstimate) //should be dataservice instead
        //SampleGroup (MinKPI/MaxKPI)
        public static TallyAction TallyThreeP(CountTree count, ISampleSelector sampler, SampleGroup sg, ITreeDataService dataService, IDialogService dialogService)
        {
            TallyAction action = new TallyAction(count)
            {
                TreeCount = 1,
            };

            var sgCode = sg.Code;
            var stCode = sg.Stratum.Code;
            var spCode = count.TreeDefaultValue.Species;
            int kpi    = 0;
            int?value  = dialogService.AskKPI((int)sg.MinKPI, (int)sg.MaxKPI, stCode, sgCode, spCode);

            if (value == null)
            {
                return(null);
            }
            else
            {
                kpi = value.Value;
            }

            if (kpi == -1)  //user entered sure to measure
            {
                var tree = dataService.CreateNewTreeEntry(count);
                tree.STM          = "Y";
                action.TreeRecord = tree;
            }
            else
            {
                action.TreeEstimate = dataService.LogTreeEstimate(count, kpi);
                action.KPI          = kpi;

                var result = ((IThreePSelector)sampler).Sample(kpi);
                if (result != SampleResult.C)
                {
                    var tree = dataService.CreateNewTreeEntry(count);
                    tree.KPI            = kpi;
                    tree.CountOrMeasure = result.ToString();
                    action.TreeRecord   = tree;
                }
            }

            return(action);
        }
コード例 #9
0
        //DataService (CreateNewTreeEntry)
        //
        public static TallyAction TallyStandard(CountTree count, ISampleSelector sampleSelecter, ITreeDataService dataService, IDialogService dialogService)
        {
            TallyAction action = new TallyAction(count)
            {
                TreeCount = 1,
            };

            var result = ((IFrequencyBasedSelecter)sampleSelecter).Sample();

            //If we receive nothing from the sampler, we don't have a sample
            if (result != SampleResult.C)//&& (item.IsSelected || item.IsInsuranceItem))
            {
                var tree = dataService.CreateNewTreeEntry(count);
                tree.CountOrMeasure = result.ToString();
                action.TreeRecord   = tree;
            }

            return(action);
        }
コード例 #10
0
        public void DeleteTallyEntry()
        {
            var unitCode      = "u1";
            var stratumCode   = "st3";
            var sgCode        = "sg1";
            var species       = "sp1";
            var liveDead      = "L";
            var tree_guid     = Guid.NewGuid().ToString();
            var tallyLedgerID = Guid.NewGuid().ToString();
            var treeCount     = 1;
            var cruiseID      = CruiseID;

            using (var database = CreateDatabase())
            {
                var datastore = new TallyDataservice(database, cruiseID, TestDeviceInfoService.TEST_DEVICEID, new SamplerInfoDataservice(database, CruiseID, TestDeviceInfoService.TEST_DEVICEID));
                var tpds      = new TallyPopulationDataservice(database, cruiseID, TestDeviceInfoService.TEST_DEVICEID);

                var tallyPop = tpds.GetTallyPopulation(unitCode, stratumCode, sgCode, species, liveDead);

                tallyPop.Should().NotBeNull("tallyPop");

                var tallyEntry = new TallyAction(unitCode, tallyPop)
                {
                    TreeCount = treeCount
                };

                var entry = datastore.InsertTallyAction(tallyEntry);

                datastore.DeleteTallyEntry(entry.TallyLedgerID);

                var tallyPopAgain = tpds.GetTallyPopulationsByUnitCode(unitCode)
                                    .Where(x => x.StratumCode == stratumCode &&
                                           x.SampleGroupCode == sgCode &&
                                           x.SpeciesCode == species).Single();

                tallyPopAgain.TreeCount.Should().Be(0, "TreeCount");
                tallyPopAgain.SumKPI.Should().Be(0, "SumKPI");

                database.ExecuteScalar <int>("SELECT count(*) FROM Tree WHERE TreeID = @p1", entry.TreeID).Should().Be(0, "tree should be deleted");
            }
        }
コード例 #11
0
        protected void OnUntallyButtonClicked(object sender, EventArgs e)
        {
            if (_viewLoading)
            {
                return;
            }

            TallyAction selectedAction = _BS_tallyHistory.Current as TallyAction;

            if (selectedAction == null)
            {
                return;
            }
            if (MessageBox.Show("Are you sure you want to untally the selected record?", "Are you sure?", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1)
                == DialogResult.No)
            {
                return;
            }

            DataService.TallyHistory.Remove(selectedAction);
        }
コード例 #12
0
        public void SaveTallyAction()
        {
            using (var database = CreateDataStore(methods: new[] { "STR" }))
            {
                var treeCount = 1;
                var unitCode  = "01";
                var ds        = new IDataEntryDataService(unitCode, database);

                var count           = ds.TreeStrata.First().Counts.First();
                var treecountBefore = count.TreeCount;

                var tallyAction = new TallyAction(count)
                {
                    TreeCount = treeCount,
                };

                ds.SaveTallyAction(tallyAction);

                count.TreeCount.Should().Be(treeCount + treecountBefore);
            }
        }
コード例 #13
0
        public TallyEntry InsertTallyAction(TallyAction atn)
        {
            if (atn is null)
            {
                throw new ArgumentNullException(nameof(atn));
            }

            if (atn.IsInsuranceSample == true && atn.IsSample == false)
            {
                throw new InvalidOperationException("If action is insurance sample it must be sample aswell");
            }

            Database.BeginTransaction();
            try
            {
                var tallyEntry = new TallyEntry(atn);

                tallyEntry.TallyLedgerID = Guid.NewGuid().ToString();

                if (atn.IsSample)
                {
                    tallyEntry.TreeID = tallyEntry.TallyLedgerID;

                    tallyEntry.TreeNumber = Database.ExecuteScalar2 <int>(
                        "SELECT " +
                        "ifnull(max(TreeNumber), 0) + 1 " +
                        "FROM Tree " +
                        "WHERE CuttingUnitCode = @CuttingUnitCode AND CruiseID = @CruiseID " +
                        "AND ifnull(PlotNumber, -1) = ifnull(@PlotNumber, -1)",
                        new { CruiseID, atn.CuttingUnitCode, atn.PlotNumber });

                    Database.Execute2(
                        @"INSERT INTO Tree (
    TreeID,
    CruiseID,
    CuttingUnitCode,
    PlotNumber,
    StratumCode,
    SampleGroupCode,
    SpeciesCode,
    LiveDead,
    TreeNumber,
    CountOrMeasure,
    CreatedBy
) VALUES (
    @TreeID,
    @CruiseID,
    @CuttingUnitCode,
    @PlotNumber,
    @StratumCode,
    @SampleGroupCode,
    @SpeciesCode,
    @LiveDead,
    @TreeNumber,
    @CountOrMeasure,
    @CreatedBy
);
INSERT INTO TreeMeasurment (
    TreeID
) VALUES (
    @TreeID
);",
                        new
                    {
                        CruiseID,
                        tallyEntry.TreeID,
                        tallyEntry.TreeNumber,
                        atn.CuttingUnitCode,
                        atn.PlotNumber,
                        atn.StratumCode,
                        atn.SampleGroupCode,
                        atn.SpeciesCode,
                        atn.LiveDead,
                        tallyEntry.CountOrMeasure,
                        CreatedBy = DeviceID,
                    });
                }

                Database.Execute2(
                    @"INSERT INTO TallyLedger (
    TreeID,
    TallyLedgerID,
    CruiseID,
    CuttingUnitCode,
    PlotNumber,
    StratumCode,
    SampleGroupCode,
    SpeciesCode,
    LiveDead,
    TreeCount,
    KPI,
    STM,
    ThreePRandomValue,
    EntryType,
    CreatedBy
) VALUES (
    @TreeID,
    @TallyLedgerID,
    @CruiseID,
    @CuttingUnitCode,
    @PlotNumber,
    @StratumCode,
    @SampleGroupCode,
    @SpeciesCode,
    @LiveDead,
    @TreeCount,
    @KPI,
    @STM,
    @ThreePRandomValue,
    @EntryType,
    @CreatedBy
);",
                    new
                {
                    CruiseID,
                    tallyEntry.TreeID,
                    tallyEntry.TallyLedgerID,
                    atn.CuttingUnitCode,
                    atn.PlotNumber,
                    atn.StratumCode,
                    atn.SampleGroupCode,
                    atn.SpeciesCode,
                    atn.LiveDead,
                    atn.TreeCount,
                    atn.KPI,
                    atn.STM,
                    atn.ThreePRandomValue,
                    atn.EntryType,
                    CreatedBy = DeviceID,
                });

                var samplerState = atn.SamplerState;
                if (samplerState != null)
                {
                    SampleInfoDataservice.UpsertSamplerState(samplerState);
                }

                Database.CommitTransaction();

                return(tallyEntry);
            }
            catch
            {
                Database.RollbackTransaction();
                throw;
            }
        }
コード例 #14
0
 public Task <TallyEntry> InsertTallyActionAsync(TallyAction tallyAction)
 {
     return(Task.Run(() => InsertTallyAction(tallyAction)));
     //return Task.Factory.StartNew(() => InsertTallyAction(tallyAction));
 }
コード例 #15
0
        public static void OnTally(CountTree count,
                                   IDataEntryDataService dataService, ICollection <TallyAction> tallyHistory,
                                   IApplicationSettings appSettings, IDataEntryView view,
                                   IDialogService dialogService, ISoundService soundService,
                                   ISampleSelectorRepository sampleSelectorRepository)
        {
            TallyAction action  = null;
            SampleGroup sg      = count.SampleGroup;
            var         sampler = sampleSelectorRepository.GetSamplerBySampleGroupCode(sg.Stratum.Code, sg.Code);


            if (sampler == null)
            {
            }
            // if doing a manual tally create a tree and jump out
            else if (sampler is ExternalSampleSelectorPlaceholder)
            {
                try
                {
                    action = new TallyAction(count);
                    var newTree = dataService.CreateNewTreeEntry(count, true); //create measure tree
                    newTree.TreeCount = sg.SamplingFrequency;                  //increment tree count on tally
                    action.TreeRecord = newTree;
                }
                catch (FMSC.ORM.SQLException) //count save fail
                {
                    dialogService.ShowMessage("File error");
                }
            }
            else if (count.SampleGroup.Stratum.Is3P)//threeP sampling
            {
                action = TallyThreeP(count, sampler, sg, dataService, dialogService);
            }
            else//non 3P sampling (STR)
            {
                action = TallyStandard(count, sampler, dataService, dialogService);
            }

            //action may be null if cruising 3P and user doesn't enter a kpi
            if (action != null)
            {
                dataService.SaveTallyAction(action);
                soundService.SignalTally();

                var tree = action.TreeRecord;
                if (tree != null)
                {
                    if (tree.CountOrMeasure == "M")
                    {
                        soundService.SignalMeasureTree();
                    }
                    else if (tree.CountOrMeasure == "I")
                    {
                        soundService.SignalInsuranceTree();
                    }

                    if (appSettings.EnableCruiserPopup)
                    {
                        dialogService.AskCruiser(tree);
                        tree.TrySave();
                    }
                    else
                    {
                        var sampleType = (tree.CountOrMeasure == "M") ? "Measure Tree" :
                                         (tree.CountOrMeasure == "I") ? "Insurance Tree" : String.Empty;
                        dialogService.ShowMessage("Tree #" + tree.TreeNumber.ToString(), sampleType);
                    }

                    if (tree.CountOrMeasure == "M" && AskEnterMeasureTreeData(appSettings, dialogService))
                    {
                        view.GotoTreePage();
                        //this.View.TreeViewMoveLast();
                    }
                }
                tallyHistory.Add(action);
            }
        }