Jelajahi Sumber

Änderungen vom 05.12. übernommen!

Arne Diekmann 8 tahun lalu
induk
melakukan
ebee59ce8d

+ 5 - 0
GreenTree.Nachtragsmanagement.Core/Domain/Deviation/Status.cs

@@ -22,5 +22,10 @@ namespace GreenTree.Nachtragsmanagement.Core.Domain.Deviation
         /// Determines if this state sets the value of the deviation to zero
         /// </summary>
         public bool IsZeroValue { get; set; }
+
+        /// <summary>
+        /// Determines if this state sets the value of the deviation to zero for summarize
+        /// </summary>
+        public bool IsZeroSummarize { get; set; }
     }
 }

+ 1 - 0
GreenTree.Nachtragsmanagement.Data/Mapping/Deviation/StatusMap.cs

@@ -18,6 +18,7 @@ namespace GreenTree.Nachtragsmanagement.Data.Mapping.Deviation
             Property(f => f.Description);
             Property(f => f.IsDefault);
             Property(f => f.IsZeroValue);
+            Property(f => f.IsZeroSummarize);
         }
     }
 }

+ 1 - 0
GreenTree.Nachtragsmanagement.Web/Controllers/DeviationController.cs

@@ -858,6 +858,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
                     claim.Description = statusModel.Description;
                     claim.IsDefault = statusModel.IsDefault;
                     claim.IsZeroValue = statusModel.IsZeroValue;
+                    claim.IsZeroSummarize = statusModel.IsZeroSummarize;
 
                     _deviationService.UpdateStatus(claim);
 

+ 29 - 0
GreenTree.Nachtragsmanagement.Web/Extensions/GridViewSettingsHelper.cs

@@ -571,6 +571,8 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
 
             var totalDisturbanceSum = default(decimal);
 
+            var totalPercentageValueSumZeroSummarize = default(decimal);
+
             s.CustomSummaryCalculate = (sender, e) =>
             {
                 if (e.SummaryProcess == CustomSummaryProcess.Start)
@@ -579,6 +581,8 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
                     totalDaysReceiptToAppendixOfferingCount = 0;
 
                     totalDisturbanceSum = 0;
+
+                    totalPercentageValueSumZeroSummarize = 0;
                 }
 
                 if (e.SummaryProcess == CustomSummaryProcess.Calculate)
@@ -595,6 +599,16 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
 
                     if (disturbanceVal != null)
                         totalDisturbanceSum += Convert.ToDecimal(disturbanceVal);
+
+                    var isZeroValueSum = e.GetValue("IsZeroSummarize");
+
+                    if (isZeroValueSum == null || (isZeroValueSum != null && !Convert.ToBoolean(isZeroValueSum)))
+                    {
+                        var percentageValue = e.GetValue("PercentageValue");
+
+                        if (percentageValue != null)
+                            totalPercentageValueSumZeroSummarize += (decimal)percentageValue;
+                    }
                 }
 
                 if (e.SummaryProcess == CustomSummaryProcess.Finalize)
@@ -610,6 +624,8 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
                     }
                     else if (summaryItem.FieldName == "DisturbanceValuesDescription")
                         e.TotalValue = totalDisturbanceSum;
+                    else if (summaryItem.FieldName == "StatusDescription")
+                        e.TotalValue = totalPercentageValueSumZeroSummarize;
                 }
             };
 
@@ -665,6 +681,19 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
                 DisplayFormat = "Schätz. bew. ∑ = <i>{0:c2}</i>"
             });
 
+            s.TotalSummary.Add(new ASPxSummaryItem
+            {
+                FieldName = "StatusDescription",
+                SummaryType = DevExpress.Data.SummaryItemType.Custom,
+                DisplayFormat = "Schätz. o. Sta. ∑<br/><i>{0:c2}</i>"
+            });
+            s.GroupSummary.Add(new ASPxSummaryItem
+            {
+                FieldName = "StatusDescription",
+                SummaryType = DevExpress.Data.SummaryItemType.Custom,
+                DisplayFormat = "Schätz. o. Sta. ∑ = <i>{0:c2}</i>"
+            });
+
             s.TotalSummary.Add(new ASPxSummaryItem
             {
                 FieldName = "DaysReceiptToAppendixOffering",

+ 9 - 5
GreenTree.Nachtragsmanagement.Web/Models/Deviation/DeviationDataModel.cs

@@ -22,6 +22,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Models.Deviation
         public decimal Percentage { get; set; }
         public decimal PercentageValue { get; set; }
         public int? StatusId { get; set; }
+        public bool IsZeroSummarize { get; set; }
         public string StatusDescription { get; set; }
         public int? KindId { get; set; }
         public string KindDescription { get; set; }
@@ -88,14 +89,16 @@ namespace GreenTree.Nachtragsmanagement.Web.Models.Deviation
                     : null,
                 AppendixDate = deviationEntity.AppendixDate,
                 Value = deviationEntity.Value.Value,
-                Percentage = deviationEntity.Percentage.HasValue
-                    ? deviationEntity.Percentage.Value
-                    : (decimal)1.0,
+                Percentage = deviationEntity.Status != null && deviationEntity.Status.IsZeroValue
+                    ? (decimal)0.0
+                    : deviationEntity.Percentage.HasValue
+                        ? deviationEntity.Percentage.Value
+                        : (decimal)1.0,
                 PercentageValue = deviationEntity.Status != null && deviationEntity.Status.IsZeroValue
                     ? 0
                     : (deviationEntity.Value.HasValue && deviationEntity.Percentage.HasValue
-                            ? deviationEntity.Value.Value * deviationEntity.Percentage.Value
-                            : 0),
+                        ? deviationEntity.Value.Value * deviationEntity.Percentage.Value
+                        : 0),
                 SiteId = deviationEntity.SiteId,
                 SiteDescription = deviationEntity.Site == null
                     ? deviationEntity.Appendix == null
@@ -159,6 +162,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Models.Deviation
                 StatusDescription = deviationEntity.Status == null
                     ? null
                     : deviationEntity.Status.Description,
+                IsZeroSummarize = deviationEntity.Status != null && deviationEntity.Status.IsZeroSummarize,
                 KindId = deviationEntity.KindId.Value,
                 KindDescription = deviationEntity.Kind == null
                     ? null

+ 5 - 2
GreenTree.Nachtragsmanagement.Web/Models/Deviation/StatusDataModel.cs

@@ -11,6 +11,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Models.Deviation
         public string Description { get; set; }
         public bool IsDefault { get; set; }
         public bool IsZeroValue { get; set; }
+        public bool IsZeroSummarize { get; set; }
 
         public static StatusDataModel FromStatus(Core.Domain.Deviation.Status statusEntity, bool newWhenIsNull)
         {
@@ -28,7 +29,8 @@ namespace GreenTree.Nachtragsmanagement.Web.Models.Deviation
                 Id = statusEntity.Id,
                 Description = statusEntity.Description,
                 IsDefault = statusEntity.IsDefault,
-                IsZeroValue = statusEntity.IsZeroValue
+                IsZeroValue = statusEntity.IsZeroValue,
+                IsZeroSummarize = statusEntity.IsZeroSummarize
             };
         }
 
@@ -39,7 +41,8 @@ namespace GreenTree.Nachtragsmanagement.Web.Models.Deviation
                 Id = this.Id,
                 Description = this.Description,
                 IsDefault = this.IsDefault,
-                IsZeroValue = this.IsZeroValue
+                IsZeroValue = this.IsZeroValue,
+                IsZeroSummarize = this.IsZeroSummarize
             };
         }
     }

+ 25 - 1
GreenTree.Nachtragsmanagement.Web/Validation/Site/SiteDataModelValidator.cs

@@ -1,4 +1,7 @@
-using FluentValidation;
+using Autofac;
+using FluentValidation;
+using GreenTree.Nachtragsmanagement.Core;
+using GreenTree.Nachtragsmanagement.Services.Site;
 using GreenTree.Nachtragsmanagement.Web.Models.Deviation;
 using GreenTree.Nachtragsmanagement.Web.Models.Site;
 using System;
@@ -16,6 +19,10 @@ namespace GreenTree.Nachtragsmanagement.Web.Validation.Site
                 .NotEmpty()
                     .WithMessage("Kostenstelle wird benötigt");
 
+            RuleFor(m => m)
+                .Must(m => CustomNumberDoesNotExist(m))
+                    .WithMessage("Kostenstelle bereits vorhanden.");
+
             RuleFor(m => m.Description)
                 .NotEmpty()
                     .WithMessage("Beschreibung wird benötigt");
@@ -28,5 +35,22 @@ namespace GreenTree.Nachtragsmanagement.Web.Validation.Site
                 .Must(r => r.Count > 0)
                     .WithMessage("Mind. ein Bearbeiter muss ausgewählt werden");
         }
+
+        private bool CustomNumberDoesNotExist(SiteDataModel model)
+        {
+            var siteService = Singleton<IContainer>.Instance.Resolve<ISiteService>();
+
+            if (model == null) return false;
+
+            var existingSiteById = siteService.GetSiteById(model.Id);
+
+            if (existingSiteById != null) return true;
+
+            var existingSiteByCustomNumber = siteService.GetSiteByCustomNumber(model.CustomNumber);
+
+            if (existingSiteByCustomNumber == null) return true;
+
+            return false;
+        }
     }
 }

+ 35 - 0
GreenTree.Nachtragsmanagement.Web/Views/Deviations/_StatusEditPartial.cshtml

@@ -132,6 +132,41 @@
 			}
 			ViewContext.Writer.Write("</div>");
 
+			ViewContext.Writer.Write("<div class='inlineModelPropertyContainer'>");
+			{
+				ViewContext.Writer.Write("<div class='inlineModelProperty' style='width: 100%'>");
+				{
+					ViewContext.Writer.Write(Html.CustomLabelFor(m => m.IsZeroSummarize, "Ist ein \"0 Summierung\"-Status:"));
+					ViewContext.Writer.Write("<div style=\"overflow: hidden\">");
+					{
+						ViewContext.Writer.Write("<div style=\"float: left\">");
+						{
+							Html.DevExpress().RadioButtonFor(m => m.IsZeroSummarize, t =>
+							{
+								t.Text = "Ja";
+								t.GroupName = "isZeroSummarize";
+							}).Render();
+						}
+						ViewContext.Writer.Write("</div>");
+
+						ViewContext.Writer.Write("<div style=\"float: left; margin-left: 8px\">");
+						{
+							Html.DevExpress().RadioButton(t =>
+							{
+								t.Name = "IsZeroSummarizeFalse";
+								t.Text = "Nein";
+								t.GroupName = "isZeroSummarize";
+								t.Checked = !Model.IsZeroSummarize;
+							}).Render();
+						}
+						ViewContext.Writer.Write("</div>");
+					}
+					ViewContext.Writer.Write("</div>");
+				}
+				ViewContext.Writer.Write("</div>");
+			}
+			ViewContext.Writer.Write("</div>");
+
 			ViewContext.Writer.Write("</div>");
 
 			Html.RenderPartial(

+ 6 - 1
GreenTree.Nachtragsmanagement.Web/Views/Sites/_SiteEditPartial.cshtml

@@ -102,6 +102,10 @@
 
 		function addDeviationToSite(siteId) {
 			if (!siteId) return;
+			if (siteId == -1) {
+				devPopupControlSaveForAppend.Show();
+				return;
+			}
 			$.ajax({
 				url: '@Url.Action("AppendDeviationToSite", "Deviation")',
 				data: { SiteId: siteId },
@@ -381,6 +385,7 @@
 					{
 						ViewContext.Writer.Write(Html.CustomLabelFor(m => m.CustomNumber, "Kostenstelle:"));
 						ViewContext.Writer.Write(Html.ValidationMessageFor(m => m.CustomNumber).ToHtmlString());
+						ViewContext.Writer.Write(Html.ValidationMessageFor(m => m).ToHtmlString());
 						Html.DevExpress().TextBoxFor(m => m.CustomNumber, t =>
 						{
 							t.Width = new Unit(90, UnitType.Percentage);
@@ -519,7 +524,7 @@
 @Html.Partial("~/Views/Shared/_PopupDialogYesNo.cshtml", new GreenTree.Nachtragsmanagement.Web.Models.Global.YesNoDialogModel
 {
 	PopupName = "devPopupControlSaveForAppend",
-	Content = "<div class='dialogTextSaveForAppend' style='padding: 12px'>Damit ein Nachtrag für die Baustelle erfasst werden kann, " +
+	Content = "<div class='dialogTextSaveForAppend' style='padding: 12px'>Damit ein NT / eine VA für die Baustelle erfasst werden kann, " +
 				"muss Sie zunächst gespeichert werden. Soll die Baustelle jetzt gespeichert werden?</div>",
 	HeaderText = "Baustelle speichern",
 	YesFunction = "function (s, e) { saveSiteForAppend(); }",