public void ShouldCalculateIndicatorValues() { var ivs = c.CalculateIndicatorValues( new Dossier { Id = 3 }, new[] { new FieldValue { FieldId = 1, Value = 10 }, new FieldValue { FieldId = 2, Value = 5 } }, new[] { new Indicator { Id = 4, Formula = "c1+c2" }, new Indicator { Id = 5, Formula = "c1*c2" } } ); ivs.Count().ShouldEqual(2); ivs.Where(o => o.IndicatorId == 4).Single().Value.ShouldEqual(15); ivs.Where(o => o.IndicatorId == 5).Single().Value.ShouldEqual(50); }
/// <summary> /// calculate indicator values /// save indicator values /// change the state /// </summary> private void SaveIndicators(int dossierId) { var dossier = dossierRepo.Get(dossierId); var fieldValues = u.GetWhere <FieldValue>(new { dossierId }).ToList(); using (var scope = new TransactionScope()) { var indicators = u.GetWhere <Indicator>(new { dossier.FieldsetId }).ToList(); var indicatorValues = ecoCalc.CalculateIndicatorValues(dossier, fieldValues, indicators); if (!indicatorValues.All(o => u.InsertNoIdentity(o) == 1)) { throw new AsmsEx("nu pot salva valorile indicatorilor"); } dossierRepo.ChangeState(dossierId, DossierStates.HasIndicators); scope.Complete(); } }