private void ValidateTallyEntry(TallyEntry entry, bool isSample, string entryType = "tally") { entry.Should().NotBeNull(); entry.TallyLedgerID.Should().NotBeNull(); if (isSample) { entry.TreeNumber.Should().NotBeNull(); } else { entry.TreeNumber.Should().BeNull(); } entry.EntryType.Should().BeEquivalentTo(entryType); }
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; } }