Index: Ringtoets/Common/src/Ringtoets.Common.Data/FailureMechanism/FailureMechanismSectionResult.cs
===================================================================
diff -u -r0b081b2391e73b7e3ff04ef31fafd2df1b1571e3 -r58c0d0a9d882210f47175f62ef1e4c494fce140b
--- Ringtoets/Common/src/Ringtoets.Common.Data/FailureMechanism/FailureMechanismSectionResult.cs (.../FailureMechanismSectionResult.cs) (revision 0b081b2391e73b7e3ff04ef31fafd2df1b1571e3)
+++ Ringtoets/Common/src/Ringtoets.Common.Data/FailureMechanism/FailureMechanismSectionResult.cs (.../FailureMechanismSectionResult.cs) (revision 58c0d0a9d882210f47175f62ef1e4c494fce140b)
@@ -21,6 +21,7 @@
using System;
using System.Collections.Generic;
+using System.Linq;
using Core.Common.Base;
using Core.Common.Base.Data;
@@ -67,7 +68,13 @@
///
/// Gets and sets the value of assessment layer two a.
///
- public RoundedDouble AssessmentLayerTwoA { get; set; }
+ public RoundedDouble AssessmentLayerTwoA
+ {
+ get
+ {
+ return GetAssessmentResult();
+ }
+ }
///
/// Gets and sets the value of assessment layer two b.
@@ -83,5 +90,18 @@
/// Gets and sets a list of
///
public List CalculationScenarios { get; private set; }
+
+ private RoundedDouble GetAssessmentResult()
+ {
+ var relevantScenarios = CalculationScenarios.Where(cs => cs.IsRelevant).ToList();
+ double totalContribution = relevantScenarios.Aggregate(0, (current, calculationScenario) => current + calculationScenario.Contribution);
+
+ if (relevantScenarios.Any() && Math.Abs(totalContribution - 1.0) > 1e-6)
+ {
+ return (RoundedDouble) double.NaN;
+ }
+
+ return new RoundedDouble();
+ }
}
}
\ No newline at end of file
Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Properties/Resources.Designer.cs
===================================================================
diff -u -r3abef5ccb0ba5386c65d4156b319970fc4337a29 -r58c0d0a9d882210f47175f62ef1e4c494fce140b
--- Ringtoets/Common/src/Ringtoets.Common.Forms/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 3abef5ccb0ba5386c65d4156b319970fc4337a29)
+++ Ringtoets/Common/src/Ringtoets.Common.Forms/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 58c0d0a9d882210f47175f62ef1e4c494fce140b)
@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
//
// This code was generated by a tool.
-// Runtime Version:4.0.30319.18444
+// Runtime Version:4.0.30319.17929
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -239,6 +239,16 @@
}
///
+ /// Looks up a localized string similar to Bijdrage van de geselecteerde scenario's voor dit vak zijn opgeteld niet gelijk aan 100%.
+ ///
+ public static string FailureMechanismResultView_DataGridViewCellFormatting_Scenario_contribution_for_this_section_not_100 {
+ get {
+ return ResourceManager.GetString("FailureMechanismResultView_DataGridViewCellFormatting_Scenario_contribution_for_t" +
+ "his_section_not_100", resourceCulture);
+ }
+ }
+
+ ///
/// Looks up a localized string similar to Toetslaag 1.
///
public static string FailureMechanismResultView_InitializeDataGridView_Assessment_layer_one {
Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Properties/Resources.resx
===================================================================
diff -u -r3abef5ccb0ba5386c65d4156b319970fc4337a29 -r58c0d0a9d882210f47175f62ef1e4c494fce140b
--- Ringtoets/Common/src/Ringtoets.Common.Forms/Properties/Resources.resx (.../Resources.resx) (revision 3abef5ccb0ba5386c65d4156b319970fc4337a29)
+++ Ringtoets/Common/src/Ringtoets.Common.Forms/Properties/Resources.resx (.../Resources.resx) (revision 58c0d0a9d882210f47175f62ef1e4c494fce140b)
@@ -241,4 +241,7 @@
..\Resources\document-task.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ Bijdrage van de geselecteerde scenario's voor dit vak zijn opgeteld niet gelijk aan 100%
+
\ No newline at end of file
Index: Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismResultView.cs
===================================================================
diff -u -rbe992ae906247ce3e6da6bd2bc31955610f1b528 -r58c0d0a9d882210f47175f62ef1e4c494fce140b
--- Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismResultView.cs (.../FailureMechanismResultView.cs) (revision be992ae906247ce3e6da6bd2bc31955610f1b528)
+++ Ringtoets/Common/src/Ringtoets.Common.Forms/Views/FailureMechanismResultView.cs (.../FailureMechanismResultView.cs) (revision 58c0d0a9d882210f47175f62ef1e4c494fce140b)
@@ -123,6 +123,7 @@
dataGridView.CurrentCellDirtyStateChanged += DataGridViewCurrentCellDirtyStateChanged;
dataGridView.CellValidating += DataGridViewCellValidating;
dataGridView.DataError += DataGridViewDataError;
+ dataGridView.CellFormatting += DataGridViewCellFormatting;
var sectionName = new DataGridViewTextBoxColumn
{
@@ -142,7 +143,8 @@
{
DataPropertyName = "AssessmentLayerTwoA",
HeaderText = Resources.FailureMechanismResultView_InitializeDataGridView_Assessment_layer_two_a,
- Name = "column_AssessmentLayerTwoA"
+ Name = "column_AssessmentLayerTwoA",
+ ReadOnly = true
};
assessmentLayerTwoB = new DataGridViewTextBoxColumn
@@ -197,7 +199,6 @@
private void SetRowEditMode(DataGridViewRow row, bool checkboxSelected)
{
- row.Cells[assessmentLayerTwoA.Index].ReadOnly = checkboxSelected;
row.Cells[assessmentLayerTwoB.Index].ReadOnly = checkboxSelected;
row.Cells[assessmentLayerThree.Index].ReadOnly = checkboxSelected;
}
@@ -262,10 +263,6 @@
{
return failureMechanismSectionResult.AssessmentLayerTwoA;
}
- set
- {
- failureMechanismSectionResult.AssessmentLayerTwoA = value;
- }
}
public RoundedDouble AssessmentLayerTwoB
@@ -329,6 +326,18 @@
}
}
+ private void DataGridViewCellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
+ {
+ if (e.ColumnIndex == assessmentLayerTwoA.Index && e.Value != null && double.IsNaN((RoundedDouble) e.Value))
+ {
+ dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].ErrorText = Resources.FailureMechanismResultView_DataGridViewCellFormatting_Scenario_contribution_for_this_section_not_100;
+ }
+ else
+ {
+ dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].ErrorText = string.Empty;
+ }
+ }
+
#endregion
}
}
\ No newline at end of file
Index: Ringtoets/Common/test/Ringtoets.Common.Data.Test/FailureMechanism/FailureMechanismSectionResultTest.cs
===================================================================
diff -u -r3462d84f3304a35ba5ce26c7d3afc9c31cdf9205 -r58c0d0a9d882210f47175f62ef1e4c494fce140b
--- Ringtoets/Common/test/Ringtoets.Common.Data.Test/FailureMechanism/FailureMechanismSectionResultTest.cs (.../FailureMechanismSectionResultTest.cs) (revision 3462d84f3304a35ba5ce26c7d3afc9c31cdf9205)
+++ Ringtoets/Common/test/Ringtoets.Common.Data.Test/FailureMechanism/FailureMechanismSectionResultTest.cs (.../FailureMechanismSectionResultTest.cs) (revision 58c0d0a9d882210f47175f62ef1e4c494fce140b)
@@ -20,8 +20,10 @@
// All rights reserved.
using System;
+using Core.Common.Base.Data;
using Core.Common.Base.Geometry;
using NUnit.Framework;
+using Rhino.Mocks;
using Ringtoets.Common.Data.FailureMechanism;
namespace Ringtoets.Common.Data.Test.FailureMechanism
@@ -40,6 +42,10 @@
// Assert
Assert.AreSame(section, sectionResult.Section);
+ Assert.IsFalse(sectionResult.AssessmentLayerOne);
+ Assert.AreEqual((RoundedDouble)0, sectionResult.AssessmentLayerTwoA);
+ Assert.AreEqual((RoundedDouble)0, sectionResult.AssessmentLayerTwoB);
+ Assert.AreEqual((RoundedDouble)0, sectionResult.AssessmentLayerThree);
CollectionAssert.IsEmpty(sectionResult.CalculationScenarios);
}
@@ -54,6 +60,31 @@
Assert.AreEqual("section", exception.ParamName);
}
+ [Test]
+ public void AssessmentLayerTwoA_ScenariosDoNotAddUpToHunderdPercent_ThrowsArgumentException()
+ {
+ // Setup
+ var section = CreateSection();
+ var failureMechanismSectionResult = new FailureMechanismSectionResult(section);
+
+ var mocks = new MockRepository();
+ var calculationScenarioMock = mocks.StrictMock();
+ calculationScenarioMock.Expect(cs => cs.IsRelevant).Return(true);
+ calculationScenarioMock.Expect(cs => cs.Contribution).Return((RoundedDouble)50);
+
+ mocks.ReplayAll();
+
+ failureMechanismSectionResult.CalculationScenarios.Add(calculationScenarioMock);
+
+ // Call
+ var assessmentLayerTwoA = new RoundedDouble();
+ TestDelegate call = () => assessmentLayerTwoA = failureMechanismSectionResult.AssessmentLayerTwoA;
+
+ // Assert
+ Assert.Throws(call);
+ mocks.VerifyAll();
+ }
+
private static FailureMechanismSection CreateSection()
{
var points = new[]
Index: Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismResultViewTest.cs
===================================================================
diff -u -re4a720dc28a93c2357d7e1b9702227cc645d46fb -r58c0d0a9d882210f47175f62ef1e4c494fce140b
--- Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismResultViewTest.cs (.../FailureMechanismResultViewTest.cs) (revision e4a720dc28a93c2357d7e1b9702227cc645d46fb)
+++ Ringtoets/Common/test/Ringtoets.Common.Forms.Test/Views/FailureMechanismResultViewTest.cs (.../FailureMechanismResultViewTest.cs) (revision 58c0d0a9d882210f47175f62ef1e4c494fce140b)
@@ -76,6 +76,7 @@
var dataGridView = (DataGridView) new ControlTester("dataGridView").TheObject;
Assert.AreEqual(5, dataGridView.ColumnCount);
+ Assert.IsTrue(dataGridView.Columns[assessmentLayerTwoAIndex].ReadOnly);
foreach (var column in dataGridView.Columns.OfType())
{
@@ -252,7 +253,6 @@
Assert.AreEqual(Color.FromKnownColor(KnownColor.ControlText), cellAssessmentLayerThreeForeColor);
}
- Assert.AreEqual(checkBoxSelected, cellAssessmentLayerTwoA.ReadOnly);
Assert.AreEqual(checkBoxSelected, cellAssessmentLayerTwoB.ReadOnly);
Assert.AreEqual(checkBoxSelected, cellAssessmentLayerThree.ReadOnly);
}
@@ -281,10 +281,6 @@
}
[Test]
- [TestCase("1", assessmentLayerTwoAIndex, "AssessmentLayerTwoA")]
- [TestCase("1e-6", assessmentLayerTwoAIndex, "AssessmentLayerTwoA")]
- [TestCase("1e+6", assessmentLayerTwoAIndex, "AssessmentLayerTwoA")]
- [TestCase("14.3", assessmentLayerTwoAIndex, "AssessmentLayerTwoA")]
[TestCase("1", assessmentLayerTwoBIndex, "AssessmentLayerTwoB")]
[TestCase("1e-6", assessmentLayerTwoBIndex, "AssessmentLayerTwoB")]
[TestCase("1e+6", assessmentLayerTwoBIndex, "AssessmentLayerTwoB")]
@@ -342,6 +338,68 @@
}
}
+ [Test]
+ public void FailureMechanismResultView_AssessmentLayerTwoANaN_ShowsErrorTooltip()
+ {
+ // Setup
+ var mocks = new MockRepository();
+ var calculationScenarioMock = mocks.StrictMock();
+ calculationScenarioMock.Expect(cs => cs.Contribution).Return((RoundedDouble) 0.3);
+ calculationScenarioMock.Expect(cs => cs.IsRelevant).Return(true);
+
+ mocks.ReplayAll();
+
+ var rowIndex = 0;
+
+ using (var view = ShowFullyConfiguredFailureMechanismResultsView())
+ {
+ var sections = (List)view.Data;
+ sections[0].CalculationScenarios.Add(calculationScenarioMock);
+
+ var gridTester = new ControlTester("dataGridView");
+ var dataGridView = (DataGridView)gridTester.TheObject;
+
+ DataGridViewCell dataGridViewCell = dataGridView.Rows[rowIndex].Cells[assessmentLayerTwoAIndex];
+
+ // Call
+ var formattedValue = dataGridViewCell.FormattedValue; // Need to do this to fire the CellFormatting event.
+
+ // Assert
+ Assert.AreEqual("Bijdrage van de geselecteerde scenario's voor dit vak zijn opgeteld niet gelijk aan 100%", dataGridViewCell.ErrorText);
+ }
+ }
+
+ [Test]
+ public void FailureMechanismResultView_AssessmentLayerTwoAHasValue_DoesNotShowsErrorTooltip()
+ {
+ // Setup
+ var mocks = new MockRepository();
+ var calculationScenarioMock = mocks.StrictMock();
+ calculationScenarioMock.Expect(cs => cs.Contribution).Return((RoundedDouble)1.0);
+ calculationScenarioMock.Expect(cs => cs.IsRelevant).Return(true);
+
+ mocks.ReplayAll();
+
+ var rowIndex = 0;
+
+ using (var view = ShowFullyConfiguredFailureMechanismResultsView())
+ {
+ var sections = (List)view.Data;
+ sections[0].CalculationScenarios.Add(calculationScenarioMock);
+
+ var gridTester = new ControlTester("dataGridView");
+ var dataGridView = (DataGridView)gridTester.TheObject;
+
+ DataGridViewCell dataGridViewCell = dataGridView.Rows[rowIndex].Cells[assessmentLayerTwoAIndex];
+
+ // Call
+ var formattedValue = dataGridViewCell.FormattedValue; // Need to do this to fire the CellFormatting event.
+
+ // Assert
+ Assert.AreEqual(string.Empty, dataGridViewCell.ErrorText);
+ }
+ }
+
private const int nameColumnIndex = 0;
private const int assessmentLayerOneIndex = 1;
private const int assessmentLayerTwoAIndex = 2;