Index: Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/AssemblyResultTotalView.Designer.cs =================================================================== diff -u -rb35dbde97af05d1e6aadc97021145e495e101712 -r1fd5ca497a36c66287f51d17dcbc08485f72016c --- Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/AssemblyResultTotalView.Designer.cs (.../AssemblyResultTotalView.Designer.cs) (revision b35dbde97af05d1e6aadc97021145e495e101712) +++ Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/AssemblyResultTotalView.Designer.cs (.../AssemblyResultTotalView.Designer.cs) (revision 1fd5ca497a36c66287f51d17dcbc08485f72016c) @@ -51,10 +51,12 @@ this.failureMechanismsWithoutProbabilityAssemblyControl = new Ringtoets.Common.Forms.Controls.FailureMechanismAssemblyCategoryGroupControl(); this.refreshButtonPanel = new System.Windows.Forms.Panel(); this.warningProvider = new System.Windows.Forms.ErrorProvider(this.components); + this.manualAssemblyWarningProvider = new System.Windows.Forms.ErrorProvider(this.components); this.assemblyResultGroupBox.SuspendLayout(); this.assemblyResultTableLayoutPanel.SuspendLayout(); this.refreshButtonPanel.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.warningProvider)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.manualAssemblyWarningProvider)).BeginInit(); this.SuspendLayout(); // // dataGridViewControl @@ -191,6 +193,13 @@ this.warningProvider.Icon = global::Ringtoets.Common.Forms.Properties.Resources.warning; this.warningProvider.SetIconPadding(this.refreshAssemblyResultsButton, 4); // + // manualAssemblyWarningProvider + // + this.manualAssemblyWarningProvider.BlinkStyle = System.Windows.Forms.ErrorBlinkStyle.NeverBlink; + this.manualAssemblyWarningProvider.ContainerControl = this; + this.manualAssemblyWarningProvider.Icon = global::Ringtoets.Common.Forms.Properties.Resources.PencilWarning; + this.manualAssemblyWarningProvider.SetIconPadding(this.refreshAssemblyResultsButton, 4); + // // AssemblyResultTotalView // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -208,6 +217,7 @@ this.refreshButtonPanel.ResumeLayout(false); this.refreshButtonPanel.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.warningProvider)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.manualAssemblyWarningProvider)).EndInit(); this.ResumeLayout(false); } @@ -226,5 +236,6 @@ private Ringtoets.Common.Forms.Controls.FailureMechanismAssemblyCategoryGroupControl failureMechanismsWithoutProbabilityAssemblyControl; private System.Windows.Forms.Panel refreshButtonPanel; private System.Windows.Forms.ErrorProvider warningProvider; + private System.Windows.Forms.ErrorProvider manualAssemblyWarningProvider; } } Index: Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/AssemblyResultTotalView.cs =================================================================== diff -u -r253cfb5af9f670f70a40399030923f8a541bc2b0 -r1fd5ca497a36c66287f51d17dcbc08485f72016c --- Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/AssemblyResultTotalView.cs (.../AssemblyResultTotalView.cs) (revision 253cfb5af9f670f70a40399030923f8a541bc2b0) +++ Ringtoets/Integration/src/Ringtoets.Integration.Forms/Views/AssemblyResultTotalView.cs (.../AssemblyResultTotalView.cs) (revision 1fd5ca497a36c66287f51d17dcbc08485f72016c) @@ -103,6 +103,7 @@ base.OnLoad(e); InitializeDataGridView(); + CheckManualAssemblyResults(); UpdateAssemblyResultControls(); dataGridViewControl.CellFormatting += HandleCellStyling; @@ -127,6 +128,7 @@ refreshAssemblyResultsButton.Enabled = true; warningProvider.SetError(refreshAssemblyResultsButton, Resources.AssemblyResultView_RefreshAssemblyResultsButton_Warning_Result_is_outdated_Press_Refresh_button_to_recalculate); + SetManualAssemblyWarningPadding(); } } @@ -185,9 +187,10 @@ private void RefreshAssemblyResults_Click(object sender, EventArgs e) { - refreshAssemblyResultsButton.Enabled = false; - warningProvider.SetError(refreshAssemblyResultsButton, string.Empty); + ResetRefreshAssemblyResultsButton(); + CheckManualAssemblyResults(); + if (updateDataSource) { SetDataSource(); @@ -201,6 +204,28 @@ UpdateAssemblyResultControls(); } + private void CheckManualAssemblyResults() + { + if (AssessmentSectionHelper.HasManualAssemblyResults(AssessmentSection)) + { + SetManualAssemblyWarningPadding(); + manualAssemblyWarningProvider.SetError(refreshAssemblyResultsButton, + RingtoetsCommonFormsResources.ManualAssemblyWarning_FailureMechanismAssemblyResult_is_based_on_manual_assemblies); + } + } + + private void SetManualAssemblyWarningPadding() + { + manualAssemblyWarningProvider.SetIconPadding(refreshAssemblyResultsButton, string.IsNullOrEmpty(warningProvider.GetError(refreshAssemblyResultsButton)) ? 4 : 24); + } + + private void ResetRefreshAssemblyResultsButton() + { + refreshAssemblyResultsButton.Enabled = false; + warningProvider.SetError(refreshAssemblyResultsButton, string.Empty); + manualAssemblyWarningProvider.SetError(refreshAssemblyResultsButton, string.Empty); + } + private void UpdateAssemblyResultControls() { UpdateTotalAssemblyCategoryGroupControl(); Index: Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/AssemblyResultTotalViewTest.cs =================================================================== diff -u -r253cfb5af9f670f70a40399030923f8a541bc2b0 -r1fd5ca497a36c66287f51d17dcbc08485f72016c --- Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/AssemblyResultTotalViewTest.cs (.../AssemblyResultTotalViewTest.cs) (revision 253cfb5af9f670f70a40399030923f8a541bc2b0) +++ Ringtoets/Integration/test/Ringtoets.Integration.Forms.Test/Views/AssemblyResultTotalViewTest.cs (.../AssemblyResultTotalViewTest.cs) (revision 1fd5ca497a36c66287f51d17dcbc08485f72016c) @@ -77,6 +77,7 @@ private const string failureMechanismsWithProbabilityControlName = "failureMechanismsWithProbabilityAssemblyControl"; private const string failureMechanismsWithoutProbabilityControlName = "failureMechanismsWithoutProbabilityAssemblyControl"; private const string assemblyResultOutdatedWarning = "Toetsoordeel is verouderd. Druk op de \"Toetsoordeel verversen\" knop om opnieuw te berekenen."; + private const string assemblyResultManualWarning = "Toetsoordeel is (deels) gebaseerd op handmatig overschreven toetsoordelen."; private Form testForm; private static IEnumerable CellFormattingStates @@ -151,15 +152,21 @@ Assert.IsInstanceOf(tableLayoutPanel.GetControlFromPosition(1, 1)); Assert.IsInstanceOf(tableLayoutPanel.GetControlFromPosition(1, 2)); - var datagridViewControl = (DataGridViewControl) new ControlTester("dataGridViewControl").TheObject; - Assert.AreEqual(DockStyle.Fill, datagridViewControl.Dock); + var dataGridViewControl = (DataGridViewControl) new ControlTester("dataGridViewControl").TheObject; + Assert.AreEqual(DockStyle.Fill, dataGridViewControl.Dock); ErrorProvider warningProvider = GetWarningProvider(view); TestHelper.AssertImagesAreEqual(RingtoetsCommonFormsResources.warning.ToBitmap(), warningProvider.Icon.ToBitmap()); Assert.AreEqual(ErrorBlinkStyle.NeverBlink, warningProvider.BlinkStyle); - Assert.IsEmpty(warningProvider.GetError(view)); + Assert.IsEmpty(warningProvider.GetError(button)); Assert.AreEqual(4, warningProvider.GetIconPadding(button)); + ErrorProvider manualAssemblyWarningProvider = GetManualAssemblyWarningProvider(view); + TestHelper.AssertImagesAreEqual(RingtoetsCommonFormsResources.PencilWarning.ToBitmap(), manualAssemblyWarningProvider.Icon.ToBitmap()); + Assert.AreEqual(ErrorBlinkStyle.NeverBlink, manualAssemblyWarningProvider.BlinkStyle); + Assert.IsEmpty(manualAssemblyWarningProvider.GetError(button)); + Assert.AreEqual(4, manualAssemblyWarningProvider.GetIconPadding(button)); + Assert.IsInstanceOf(view); Assert.IsInstanceOf(view); Assert.IsNull(view.Data); @@ -543,6 +550,91 @@ } } + [Test] + [TestCase(true)] + [TestCase(false)] + public void GivenFormWithAssemblyResultTotalViewWithManualAssembly_ThenExpectedWarningSet(bool hasManualAssembly) + { + // Given + var assessmentSection = new AssessmentSection(new Random(21).NextEnumValue()); + PipingFailureMechanism failureMechanism = assessmentSection.Piping; + FailureMechanismTestHelper.AddSections(failureMechanism, 1); + failureMechanism.SectionResults.Single().UseManualAssemblyProbability = hasManualAssembly; + + // When + using (AssemblyResultTotalView view = ShowAssemblyResultTotalView(assessmentSection)) + { + // Then + ButtonTester buttonTester = GetRefreshAssemblyResultButtonTester(); + Button button = buttonTester.Properties; + ErrorProvider manualAssemblyWarningProvider = GetManualAssemblyWarningProvider(view); + Assert.AreEqual(hasManualAssembly ? assemblyResultManualWarning : string.Empty, manualAssemblyWarningProvider.GetError(button)); + } + } + + [Test] + [TestCase(true)] + [TestCase(false)] + public void GivenFormWithAssemblyResultTotalViewWithManualAssembly_WhenAssessmentSectionNotifiesObservers_ThenWarningsSet( + bool hasManualAssembly) + { + // Given + var assessmentSection = new AssessmentSection(new Random(21).NextEnumValue()); + PipingFailureMechanism failureMechanism = assessmentSection.Piping; + FailureMechanismTestHelper.AddSections(failureMechanism, 1); + failureMechanism.SectionResults.Single().UseManualAssemblyProbability = hasManualAssembly; + + using (AssemblyResultTotalView view = ShowAssemblyResultTotalView(assessmentSection)) + { + // Precondition + ButtonTester buttonTester = GetRefreshAssemblyResultButtonTester(); + Button button = buttonTester.Properties; + Assert.IsFalse(button.Enabled); + ErrorProvider warningProvider = GetWarningProvider(view); + Assert.IsEmpty(warningProvider.GetError(button)); + ErrorProvider manualAssemblyWarningProvider = GetManualAssemblyWarningProvider(view); + string expectedManualAssemblyWarning = hasManualAssembly ? assemblyResultManualWarning : string.Empty; + Assert.AreEqual(4, manualAssemblyWarningProvider.GetIconPadding(button)); + Assert.AreEqual(expectedManualAssemblyWarning, manualAssemblyWarningProvider.GetError(button)); + + // When + assessmentSection.NotifyObservers(); + + // Then + Assert.AreEqual(assemblyResultOutdatedWarning, warningProvider.GetError(button)); + Assert.AreEqual(expectedManualAssemblyWarning, manualAssemblyWarningProvider.GetError(button)); + Assert.AreEqual(24, manualAssemblyWarningProvider.GetIconPadding(button)); + } + } + + [Test] + public void GivenAssemblyResultTotalViewAssessmentSectionObserversNotified_WhenRefreshingAssemblyResults_ThenWarningAndPaddingSet() + { + // Given + using (new AssemblyToolCalculatorFactoryConfig()) + using (AssemblyResultTotalView view = ShowAssemblyResultTotalView()) + { + AssessmentSection assessmentSection = view.AssessmentSection; + PipingFailureMechanism failureMechanism = assessmentSection.Piping; + FailureMechanismTestHelper.AddSections(failureMechanism, 1); + failureMechanism.SectionResults.Single().UseManualAssemblyProbability = true; + assessmentSection.NotifyObservers(); + + // Precondition + ButtonTester buttonTester = GetRefreshAssemblyResultButtonTester(); + Button button = buttonTester.Properties; + ErrorProvider manualAssemblyWarningProvider = GetManualAssemblyWarningProvider(view); + Assert.AreEqual(24, manualAssemblyWarningProvider.GetIconPadding(button)); + + // When + buttonTester.Click(); + + // Then + Assert.AreEqual(4, manualAssemblyWarningProvider.GetIconPadding(button)); + Assert.AreEqual(assemblyResultManualWarning, manualAssemblyWarningProvider.GetError(button)); + } + } + #region Use Manual Assembly [Test] @@ -1100,6 +1192,11 @@ return TypeUtils.GetField(resultControl, "warningProvider"); } + private static ErrorProvider GetManualAssemblyWarningProvider(AssemblyResultTotalView resultControl) + { + return TypeUtils.GetField(resultControl, "manualAssemblyWarningProvider"); + } + #endregion #region Asserts datagrid control