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);
        }
Exemplo n.º 2
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;
            }
        }