From cd30eb17544c66e34a030eabf493264dd90ea589 Mon Sep 17 00:00:00 2001 From: HelgeArkitektum Date: Tue, 18 Oct 2022 12:15:00 +0200 Subject: [PATCH] Allow area = 0 for some tiltakstyper --- Data/Repository.cs | 76 +++++++++++++-------------- Models/Tiltakstype.cs | 1 + Services/AtilFeeCalculationService.cs | 11 ++-- 3 files changed, 47 insertions(+), 41 deletions(-) diff --git a/Data/Repository.cs b/Data/Repository.cs index 7dd2d3e..87ebe6a 100644 --- a/Data/Repository.cs +++ b/Data/Repository.cs @@ -42,32 +42,32 @@ public List GetTiltakstyper() private void PopulateTiltakstyper() { _tiltakstyper = new List(); - _tiltakstyper.Add(new Tiltakstype() { Kode = "berekonstruksjoner", Navn = "Endring av bygg - innvendig - Bærekonstruksjoner i bygg", Kategori = "5" }); - _tiltakstyper.Add(new Tiltakstype() { Kode = "brannskille", Navn = "Endring av bygg - innvendig - Brannskille i bygg", Kategori = "5" }); - _tiltakstyper.Add(new Tiltakstype() { Kode = "bruksendring", Navn = "Bruksendring", Kategori = "1, 2, 3" }); - _tiltakstyper.Add(new Tiltakstype() { Kode = "driftsbygningendringover1000m2", Navn = "Endring av driftsbygning i landbruket over 1000m2 (BRA)", Kategori = "5" }); - _tiltakstyper.Add(new Tiltakstype() { Kode = "driftsbygningendringunder1000m2", Navn = "Endring av driftsbygning i landbruket under 1000m2 (BRA)", Kategori = "5" }); - _tiltakstyper.Add(new Tiltakstype() { Kode = "driftsbygningtilbyggover1000m2", Navn = "Tilbygg til driftsbygning i landbruket med samlet area over 1000 m2 (BRA)", Kategori = "1, 2, 3" }); - _tiltakstyper.Add(new Tiltakstype() { Kode = "driftsbygningtilbyggunder1000m2", Navn = "Tilbygg til driftsbygning i landbruket med samlet area under 1000 m2 (BRA)", Kategori = "1, 2, 3" }); - _tiltakstyper.Add(new Tiltakstype() { Kode = "endringbyggannet", Navn = "Endring av bygg - Annet", Kategori = "5" }); - _tiltakstyper.Add(new Tiltakstype() { Kode = "endringdrift", Navn = "Vesentlig endring av tidligere drift", Kategori = "1, 2, 3" }); - _tiltakstyper.Add(new Tiltakstype() { Kode = "fasade", Navn = "Endring av bygg - utvendig - Fasade", Kategori = "5" }); - _tiltakstyper.Add(new Tiltakstype() { Kode = "fundamenter", Navn = "Endring av bygg - innvendig - Fundamenter i bygg", Kategori = "5" }); - _tiltakstyper.Add(new Tiltakstype() { Kode = "installasjonernyttanlegg", Navn = "Bygningstekniske installasjoner - Nytt anlegg", Kategori = "5" }); - _tiltakstyper.Add(new Tiltakstype() { Kode = "installasjonerreparasjon", Navn = "Bygningstekniske installasjoner - Reparasjon", Kategori = "5" }); - _tiltakstyper.Add(new Tiltakstype() { Kode = "installasjonibygg", Navn = "Bygningstekniske installasjoner - Endring - Teknisk installasjon i bygg", Kategori = "5" }); - _tiltakstyper.Add(new Tiltakstype() { Kode = "lydskille", Navn = "Endring av bygg - innvendig - Lydskille i bygg", Kategori = "5" }); - _tiltakstyper.Add(new Tiltakstype() { Kode = "nyttbyggdriftsbygningover1000m2", Navn = "Nytt bygg - Driftsbygning i landbruket med samlet areal over 1000 m2", Kategori = "1, 2, 3" }); - _tiltakstyper.Add(new Tiltakstype() { Kode = "nyttbyggdriftsbygningunder1000m2", Navn = "Nytt bygg - Driftsbygning i landbruk med samlet areal under 1000 m2", Kategori = "1, 2, 3" }); - _tiltakstyper.Add(new Tiltakstype() { Kode = "nyttbyggover70m2", Navn = "Nytt bygg - Over 70 m2 - ikke boligformål", Kategori = "1, 2, 3" }); - _tiltakstyper.Add(new Tiltakstype() { Kode = "nyttbyggunder70m2", Navn = "Nytt bygg - Under 70 m2 - ikke boligformål", Kategori = "1, 2, 3" }); - _tiltakstyper.Add(new Tiltakstype() { Kode = "pabygg", Navn = "Endring av bygg - utvendig - Påbygg", Kategori = "1, 2, 3" }); - _tiltakstyper.Add(new Tiltakstype() { Kode = "plasseringmidlertidig", Navn = "Plassering av midlertidige bygninger, konstruksjoner og anlegg", Kategori = "1, 2, 3" }); - _tiltakstyper.Add(new Tiltakstype() { Kode = "tilbyggover50m2", Navn = "Endring av bygg - utvendig - Tilbygg med samlet areal større enn 50 m2", Kategori = "1, 2, 3" }); - _tiltakstyper.Add(new Tiltakstype() { Kode = "tilbyggunder50m2", Navn = "Endring av bygg - utvendig - Tilbygg med samlet areal mindre enn 50 m2", Kategori = "1, 2, 3" }); - _tiltakstyper.Add(new Tiltakstype() { Kode = "underbygg", Navn = "Endring av bygg - utvendig - Underbygg", Kategori = "1, 2, 3" }); - _tiltakstyper.Add(new Tiltakstype() { Kode = "utvendigeinstallasjoner", Navn = "Bygningstekniske installasjoner - Endring - Utvendige tekniske installasjoner", Kategori = "5" }); - _tiltakstyper.Add(new Tiltakstype() { Kode = "vatrom", Navn = "Endring av bygg - innvendig - Våtrom i bygg", Kategori = "5" }); + _tiltakstyper.Add(new Tiltakstype() {AllowZeroBRA = true, Kode = "berekonstruksjoner", Navn = "Endring av bygg - innvendig - Bærekonstruksjoner i bygg", Kategori = "5" }); + _tiltakstyper.Add(new Tiltakstype() {AllowZeroBRA = true, Kode = "brannskille", Navn = "Endring av bygg - innvendig - Brannskille i bygg", Kategori = "5" }); + _tiltakstyper.Add(new Tiltakstype() {AllowZeroBRA = false, Kode = "bruksendring", Navn = "Bruksendring", Kategori = "1, 2, 3" }); + _tiltakstyper.Add(new Tiltakstype() {AllowZeroBRA = true, Kode = "driftsbygningendringover1000m2", Navn = "Endring av driftsbygning i landbruket over 1000m2 (BRA)", Kategori = "5" }); + _tiltakstyper.Add(new Tiltakstype() {AllowZeroBRA = true, Kode = "driftsbygningendringunder1000m2", Navn = "Endring av driftsbygning i landbruket under 1000m2 (BRA)", Kategori = "5" }); + _tiltakstyper.Add(new Tiltakstype() {AllowZeroBRA = false, Kode = "driftsbygningtilbyggover1000m2", Navn = "Tilbygg til driftsbygning i landbruket med samlet area over 1000 m2 (BRA)", Kategori = "1, 2, 3" }); + _tiltakstyper.Add(new Tiltakstype() {AllowZeroBRA = false, Kode = "driftsbygningtilbyggunder1000m2", Navn = "Tilbygg til driftsbygning i landbruket med samlet area under 1000 m2 (BRA)", Kategori = "1, 2, 3" }); + _tiltakstyper.Add(new Tiltakstype() {AllowZeroBRA = true, Kode = "endringbyggannet", Navn = "Endring av bygg - Annet", Kategori = "5" }); + _tiltakstyper.Add(new Tiltakstype() {AllowZeroBRA = false, Kode = "endringdrift", Navn = "Vesentlig endring av tidligere drift", Kategori = "1, 2, 3" }); + _tiltakstyper.Add(new Tiltakstype() {AllowZeroBRA = true, Kode = "fasade", Navn = "Endring av bygg - utvendig - Fasade", Kategori = "5" }); + _tiltakstyper.Add(new Tiltakstype() {AllowZeroBRA = true, Kode = "fundamenter", Navn = "Endring av bygg - innvendig - Fundamenter i bygg", Kategori = "5" }); + _tiltakstyper.Add(new Tiltakstype() {AllowZeroBRA = true, Kode = "installasjonernyttanlegg", Navn = "Bygningstekniske installasjoner - Nytt anlegg", Kategori = "5" }); + _tiltakstyper.Add(new Tiltakstype() {AllowZeroBRA = true, Kode = "installasjonerreparasjon", Navn = "Bygningstekniske installasjoner - Reparasjon", Kategori = "5" }); + _tiltakstyper.Add(new Tiltakstype() {AllowZeroBRA = true, Kode = "installasjonibygg", Navn = "Bygningstekniske installasjoner - Endring - Teknisk installasjon i bygg", Kategori = "5" }); + _tiltakstyper.Add(new Tiltakstype() {AllowZeroBRA = true, Kode = "lydskille", Navn = "Endring av bygg - innvendig - Lydskille i bygg", Kategori = "5" }); + _tiltakstyper.Add(new Tiltakstype() {AllowZeroBRA = false, Kode = "nyttbyggdriftsbygningover1000m2", Navn = "Nytt bygg - Driftsbygning i landbruket med samlet areal over 1000 m2", Kategori = "1, 2, 3" }); + _tiltakstyper.Add(new Tiltakstype() {AllowZeroBRA = false, Kode = "nyttbyggdriftsbygningunder1000m2", Navn = "Nytt bygg - Driftsbygning i landbruk med samlet areal under 1000 m2", Kategori = "1, 2, 3" }); + _tiltakstyper.Add(new Tiltakstype() {AllowZeroBRA = false, Kode = "nyttbyggover70m2", Navn = "Nytt bygg - Over 70 m2 - ikke boligformål", Kategori = "1, 2, 3" }); + _tiltakstyper.Add(new Tiltakstype() {AllowZeroBRA = false, Kode = "nyttbyggunder70m2", Navn = "Nytt bygg - Under 70 m2 - ikke boligformål", Kategori = "1, 2, 3" }); + _tiltakstyper.Add(new Tiltakstype() {AllowZeroBRA = false, Kode = "pabygg", Navn = "Endring av bygg - utvendig - Påbygg", Kategori = "1, 2, 3" }); + _tiltakstyper.Add(new Tiltakstype() {AllowZeroBRA = false, Kode = "plasseringmidlertidig", Navn = "Plassering av midlertidige bygninger, konstruksjoner og anlegg", Kategori = "1, 2, 3" }); + _tiltakstyper.Add(new Tiltakstype() {AllowZeroBRA = false, Kode = "tilbyggover50m2", Navn = "Endring av bygg - utvendig - Tilbygg med samlet areal større enn 50 m2", Kategori = "1, 2, 3" }); + _tiltakstyper.Add(new Tiltakstype() {AllowZeroBRA = false, Kode = "tilbyggunder50m2", Navn = "Endring av bygg - utvendig - Tilbygg med samlet areal mindre enn 50 m2", Kategori = "1, 2, 3" }); + _tiltakstyper.Add(new Tiltakstype() {AllowZeroBRA = false, Kode = "underbygg", Navn = "Endring av bygg - utvendig - Underbygg", Kategori = "1, 2, 3" }); + _tiltakstyper.Add(new Tiltakstype() {AllowZeroBRA = true, Kode = "utvendigeinstallasjoner", Navn = "Bygningstekniske installasjoner - Endring - Utvendige tekniske installasjoner", Kategori = "5" }); + _tiltakstyper.Add(new Tiltakstype() {AllowZeroBRA = true, Kode = "vatrom", Navn = "Endring av bygg - innvendig - Våtrom i bygg", Kategori = "5" }); } private void PopulateBygningstyper() @@ -219,10 +219,10 @@ private void PopulateKategorier() CategoryAreas = new List() { new Area() { Lower = 0, Upper = 100, CategoryCode = "1", Price = 703 }, - new Area() { Lower = 100, Upper = 500, CategoryCode = "3", Price = 1407 }, - new Area() { Lower = 500, Upper = 1000, CategoryCode = "4", Price = 2110 }, - new Area() { Lower = 1000, Upper = 10000, CategoryCode = "5", Price = 2814 }, - new Area() { Lower = 10000, Upper = 100000000, CategoryCode = "6", Price = 3895 } + new Area() { Lower = 101, Upper = 500, CategoryCode = "3", Price = 1407 }, + new Area() { Lower = 501, Upper = 1000, CategoryCode = "4", Price = 2110 }, + new Area() { Lower = 1001, Upper = 10000, CategoryCode = "5", Price = 2814 }, + new Area() { Lower = 10001, Upper = 100000000, CategoryCode = "6", Price = 3895 } } }; @@ -234,10 +234,10 @@ private void PopulateKategorier() CategoryAreas = new List() { new Area() { Lower = 0, Upper = 100, CategoryCode = "7", Price = 2110 }, - new Area() { Lower = 100, Upper = 500, CategoryCode = "8", Price = 4221 }, - new Area() { Lower = 500, Upper = 1000, CategoryCode = "9", Price = 6331 }, - new Area() { Lower = 1000, Upper = 10000, CategoryCode = "10", Price = 8441 }, - new Area() { Lower = 10000, Upper = 100000000, CategoryCode = "11", Price = 11685 } + new Area() { Lower = 101, Upper = 500, CategoryCode = "8", Price = 4221 }, + new Area() { Lower = 501, Upper = 1000, CategoryCode = "9", Price = 6331 }, + new Area() { Lower = 1001, Upper = 10000, CategoryCode = "10", Price = 8441 }, + new Area() { Lower = 10001, Upper = 100000000, CategoryCode = "11", Price = 11685 } } }; @@ -249,10 +249,10 @@ private void PopulateKategorier() CategoryAreas = new List() { new Area() { Lower = 0, Upper = 100, CategoryCode = "12", Price = 4221 }, - new Area() { Lower = 100, Upper = 500, CategoryCode = "13", Price = 8441 }, - new Area() { Lower = 500, Upper = 1000, CategoryCode = "14", Price = 12662 }, - new Area() { Lower = 1000, Upper = 10000, CategoryCode = "15", Price = 16883 }, - new Area() { Lower = 10000, Upper = 100000000, CategoryCode = "16", Price = 23370 } + new Area() { Lower = 101, Upper = 500, CategoryCode = "13", Price = 8441 }, + new Area() { Lower = 501, Upper = 1000, CategoryCode = "14", Price = 12662 }, + new Area() { Lower = 1001, Upper = 10000, CategoryCode = "15", Price = 16883 }, + new Area() { Lower = 10001, Upper = 100000000, CategoryCode = "16", Price = 23370 } } }; diff --git a/Models/Tiltakstype.cs b/Models/Tiltakstype.cs index efea83f..2e11d30 100644 --- a/Models/Tiltakstype.cs +++ b/Models/Tiltakstype.cs @@ -10,6 +10,7 @@ public class Tiltakstype public string Kode { get; set; } public string Navn { get; set; } public string Kategori { get; set; } + public bool AllowZeroBRA { get; set; } } } diff --git a/Services/AtilFeeCalculationService.cs b/Services/AtilFeeCalculationService.cs index e8012d6..3b468d0 100644 --- a/Services/AtilFeeCalculationService.cs +++ b/Services/AtilFeeCalculationService.cs @@ -72,9 +72,9 @@ public CalculationResult Calculate(string tiltakstypekode, string bygningstypeko { if (Int32.TryParse(areal, out int arealTall)) { - if (arealTall <= 0) + if (arealTall < 0) { - throw new ArgumentException($"Areal må være et heltall større enn 0. '{areal}' er ikke gyldig."); + throw new ArgumentException($"Areal kan ikke være et negativt tall. '{areal}' er ikke gyldig."); } if (!_repository.GetTiltakstyper().Exists(x => x.Kode.Equals(tiltakstypekode))) @@ -82,13 +82,18 @@ public CalculationResult Calculate(string tiltakstypekode, string bygningstypeko throw new IllegalTiltakstypeException($"Angitt kode '{tiltakstypekode}' for tiltakstype er ikke tillatt."); } + if (arealTall == 0 && _repository.GetTiltakstyper().Any(tiltakstype => tiltakstype.Kode.Equals(tiltakstypekode) && !tiltakstype.AllowZeroBRA)) + { + throw new ArgumentException($"Areal må være et heltall større enn 0. '{areal}' er ikke gyldig."); + } + if (!_repository.GetBygningstyper().Exists(x => x.Kode.Equals(bygningstypekode))) { throw new ArgumentException($"Angitt kode '{bygningstypekode}' for bygningstype er ikke tillatt."); } var foundCategory = _repository.GetKategorier().FirstOrDefault(x => x.Tiltakstype.Contains(tiltakstypekode) && x.Bygningstype.Contains(bygningstypekode)); - var foundArea = foundCategory.CategoryAreas.First(x => arealTall > x.Lower && arealTall <= x.Upper); + var foundArea = foundCategory.CategoryAreas.First(x => arealTall >= x.Lower && arealTall <= x.Upper); var res = new CalculationResult() { Area = areal,