Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/develop' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
oysteinthoensisjord committed Sep 11, 2023
2 parents a9753ed + dee253a commit 744dcdf
Show file tree
Hide file tree
Showing 5 changed files with 93 additions and 51 deletions.
2 changes: 1 addition & 1 deletion Controllers/AtilFeeCalculationController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public ActionResult<CalculationResult> CalculatAtilFee([FromQuery]IEnumerable<st
[HttpGet]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public ActionResult<CalculationResultBasis> CalculatAtilFeeBasis(string tiltakstype, string bygningstype, string areal)
public ActionResult<CalculationResultBasis> CalculatAtilFeeBasis([FromQuery] IEnumerable<string> tiltakstype, string bygningstype, string areal)
{

try
Expand Down
79 changes: 40 additions & 39 deletions Data/Repository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,32 +42,33 @@ public List<Tiltakstype> GetTiltakstyper()
private void PopulateTiltakstyper()
{
_tiltakstyper = new List<Tiltakstype>();
_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() {TillaterZeroIAreal = true, Kode = "berekonstruksjoner", Navn = "Endring av bygg - innvendig - Bærekonstruksjoner i bygg", Kategori = "5" });
_tiltakstyper.Add(new Tiltakstype() {TillaterZeroIAreal = true, Kode = "brannskille", Navn = "Endring av bygg - innvendig - Brannskille i bygg", Kategori = "5" });
_tiltakstyper.Add(new Tiltakstype() {TillaterZeroIAreal = false, Kode = "bruksendring", Navn = "Bruksendring", Kategori = "1, 2, 3" });
_tiltakstyper.Add(new Tiltakstype() {TillaterZeroIAreal = true, Kode = "driftsbygningendringover1000m2", Navn = "Endring av driftsbygning i landbruket over 1000m2 (BRA)", Kategori = "5" });
_tiltakstyper.Add(new Tiltakstype() {TillaterZeroIAreal = true, Kode = "driftsbygningendringunder1000m2", Navn = "Endring av driftsbygning i landbruket under 1000m2 (BRA)", Kategori = "5" });
_tiltakstyper.Add(new Tiltakstype() {TillaterZeroIAreal = false, Kode = "driftsbygningtilbyggover1000m2", Navn = "Tilbygg til driftsbygning i landbruket med samlet area over 1000 m2 (BRA)", Kategori = "1, 2, 3" });
_tiltakstyper.Add(new Tiltakstype() {TillaterZeroIAreal = false, Kode = "driftsbygningtilbyggunder1000m2", Navn = "Tilbygg til driftsbygning i landbruket med samlet area under 1000 m2 (BRA)", Kategori = "1, 2, 3" });
_tiltakstyper.Add(new Tiltakstype() {TillaterZeroIAreal = true, Kode = "endringbyggannet", Navn = "Endring av bygg - Annet", Kategori = "5" });
_tiltakstyper.Add(new Tiltakstype() {TillaterZeroIAreal = false, Kode = "endringdrift", Navn = "Vesentlig endring av tidligere drift", Kategori = "1, 2, 3" });
_tiltakstyper.Add(new Tiltakstype() {TillaterZeroIAreal = true, Kode = "fasade", Navn = "Endring av bygg - utvendig - Fasade", Kategori = "5" });
_tiltakstyper.Add(new Tiltakstype() {TillaterZeroIAreal = true, Kode = "fundamenter", Navn = "Endring av bygg - innvendig - Fundamenter i bygg", Kategori = "5" });
_tiltakstyper.Add(new Tiltakstype() {TillaterZeroIAreal = false, Kode = "hovedombygging", Navn = "Endring av bygg - hovedombygging", Kategori = "1, 2, 3" });
_tiltakstyper.Add(new Tiltakstype() {TillaterZeroIAreal = true, Kode = "installasjonernyttanlegg", Navn = "Bygningstekniske installasjoner - Nytt anlegg", Kategori = "5" });
_tiltakstyper.Add(new Tiltakstype() {TillaterZeroIAreal = true, Kode = "installasjonerreparasjon", Navn = "Bygningstekniske installasjoner - Reparasjon", Kategori = "5" });
_tiltakstyper.Add(new Tiltakstype() {TillaterZeroIAreal = true, Kode = "installasjonibygg", Navn = "Bygningstekniske installasjoner - Endring - Teknisk installasjon i bygg", Kategori = "5" });
_tiltakstyper.Add(new Tiltakstype() {TillaterZeroIAreal = true, Kode = "lydskille", Navn = "Endring av bygg - innvendig - Lydskille i bygg", Kategori = "5" });
_tiltakstyper.Add(new Tiltakstype() {TillaterZeroIAreal = false, Kode = "nyttbyggdriftsbygningover1000m2", Navn = "Nytt bygg - Driftsbygning i landbruket med samlet areal over 1000 m2", Kategori = "1, 2, 3" });
_tiltakstyper.Add(new Tiltakstype() {TillaterZeroIAreal = false, Kode = "nyttbyggdriftsbygningunder1000m2", Navn = "Nytt bygg - Driftsbygning i landbruk med samlet areal under 1000 m2", Kategori = "1, 2, 3" });
_tiltakstyper.Add(new Tiltakstype() {TillaterZeroIAreal = false, Kode = "nyttbyggover70m2", Navn = "Nytt bygg - Over 70 m2 - ikke boligformål", Kategori = "1, 2, 3" });
_tiltakstyper.Add(new Tiltakstype() {TillaterZeroIAreal = false, Kode = "nyttbyggunder70m2", Navn = "Nytt bygg - Under 70 m2 - ikke boligformål", Kategori = "1, 2, 3" });
_tiltakstyper.Add(new Tiltakstype() {TillaterZeroIAreal = false, Kode = "pabygg", Navn = "Endring av bygg - utvendig - Påbygg", Kategori = "1, 2, 3" });
_tiltakstyper.Add(new Tiltakstype() {TillaterZeroIAreal = false, Kode = "plasseringmidlertidig", Navn = "Plassering av midlertidige bygninger, konstruksjoner og anlegg", Kategori = "1, 2, 3" });
_tiltakstyper.Add(new Tiltakstype() {TillaterZeroIAreal = 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() {TillaterZeroIAreal = false, Kode = "tilbyggunder50m2", Navn = "Endring av bygg - utvendig - Tilbygg med samlet areal mindre enn 50 m2", Kategori = "1, 2, 3" });
_tiltakstyper.Add(new Tiltakstype() {TillaterZeroIAreal = false, Kode = "underbygg", Navn = "Endring av bygg - utvendig - Underbygg", Kategori = "1, 2, 3" });
_tiltakstyper.Add(new Tiltakstype() {TillaterZeroIAreal = true, Kode = "utvendigeinstallasjoner", Navn = "Bygningstekniske installasjoner - Endring - Utvendige tekniske installasjoner", Kategori = "5" });
_tiltakstyper.Add(new Tiltakstype() {TillaterZeroIAreal = true, Kode = "vatrom", Navn = "Endring av bygg - innvendig - Våtrom i bygg", Kategori = "5" });

}
private void PopulateBygningstyper()
Expand Down Expand Up @@ -202,7 +203,7 @@ private void PopulateKategorier()
Category category_3;
Category category_5;

List<string> tiltakstyper_kat_1_3 = new List<string>() { "nyttbyggover70m2", "nyttbyggunder70m2", "nyttbyggdriftsbygningover1000m2", "nyttbyggdriftsbygningunder1000m2", "tilbyggover50m2", "tilbyggunder50m2", "pabygg", "underbygg", "driftsbygningtilbyggover1000m2", "driftsbygningtilbyggunder1000m2", "bruksendring", "endringdrift", "plasseringmidlertidig" };
List<string> tiltakstyper_kat_1_3 = new List<string>() { "hovedombygging", "nyttbyggover70m2", "nyttbyggunder70m2", "nyttbyggdriftsbygningover1000m2", "nyttbyggdriftsbygningunder1000m2", "tilbyggover50m2", "tilbyggunder50m2", "pabygg", "underbygg", "driftsbygningtilbyggover1000m2", "driftsbygningtilbyggunder1000m2", "bruksendring", "endringdrift", "plasseringmidlertidig" };
List<string> tiltakstyper_kat_5 = new List<string>() { "brannskille", "lydskille", "fundamenter", "berekonstruksjoner", "vatrom", "driftsbygningendringover1000m2", "driftsbygningendringunder1000m2", "fasade", "endringbyggannet", "installasjonernyttanlegg", "utvendigeinstallasjoner", "installasjonibygg", "installasjonerreparasjon" };

IEnumerable<string> bygningstype_kat_1 = new List<string>() { "223", "229", "233", "243", "245", "429", "431", "439", "523", "524", "529", "611", "654", "659", "825", "829", "830", "840" };
Expand All @@ -219,10 +220,10 @@ private void PopulateKategorier()
CategoryAreas = new List<Area>()
{
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 }
}
};

Expand All @@ -234,10 +235,10 @@ private void PopulateKategorier()
CategoryAreas = new List<Area>()
{
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 }
}
};

Expand All @@ -249,10 +250,10 @@ private void PopulateKategorier()
CategoryAreas = new List<Area>()
{
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 }
}
};

Expand Down
20 changes: 20 additions & 0 deletions Exceptions/IllegalTiltakstypeException.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using System;

namespace ATIL.FeeCalculator.Exceptions
{
[Serializable]
public class IllegalTiltakstypeException : Exception
{
public IllegalTiltakstypeException()
{
}

public IllegalTiltakstypeException(string message) : base(message)
{
}

public IllegalTiltakstypeException(string message, Exception innerException) : base(message, innerException)
{
}
}
}
1 change: 1 addition & 0 deletions Models/Tiltakstype.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ public class Tiltakstype
public string Kode { get; set; }
public string Navn { get; set; }
public string Kategori { get; set; }
public bool TillaterZeroIAreal { get; set; }

}
}
42 changes: 31 additions & 11 deletions Services/AtilFeeCalculationService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using ATIL.FeeCalculator.Data;
using ATIL.FeeCalculator.Exceptions;
using ATIL.FeeCalculator.Models;

namespace ATIL.FeeCalculator.Services
Expand Down Expand Up @@ -32,19 +33,33 @@ public List<FeeCategoryDescription> GetGebyrKategoriBeskrivelser()

public CalculationResult Calculate(IEnumerable<string> tiltakstypekode, string bygningstypekode, string areal)
{
bool illegalTiltakstype = false;
int maxFee = 0;
CalculationResult result = null;

foreach (var tiltakstype in tiltakstypekode)
{
var calculation = Calculate(tiltakstype, bygningstypekode, areal);
if (calculation != null)
try
{
if (calculation.Fee.FeeAmount > maxFee)
var calculation = Calculate(tiltakstype, bygningstypekode, areal);
if (calculation != null)
{
maxFee = calculation.Fee.FeeAmount;
result = calculation;
if (calculation.Fee.FeeAmount > maxFee)
{
maxFee = calculation.Fee.FeeAmount;
result = calculation;
}
}
}
catch (IllegalTiltakstypeException)
{
illegalTiltakstype = true;
}

}
if (result == null && illegalTiltakstype)
{
throw new ArgumentException($"Ingen gyldige koder for tiltakstype er angitt.");
}

return result;
Expand All @@ -57,23 +72,28 @@ public CalculationResult Calculate(string tiltakstypekode, string bygningstypeko
{
if (Int32.TryParse(areal, out int arealTall))
{
if (arealTall <= 0)
if (arealTall < 0)
{
throw new ArgumentException($"Areal 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)))
{
throw new ArgumentException($"Angitt kode for tiltakstype ('{tiltakstypekode}') er ikke tillatt.");
throw new IllegalTiltakstypeException($"Angitt kode '{tiltakstypekode}' for tiltakstype er ikke tillatt.");
}

if (arealTall == 0 && _repository.GetTiltakstyper().Any(tiltakstype => tiltakstype.Kode.Equals(tiltakstypekode) && !tiltakstype.TillaterZeroIAreal))
{
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 for bygningstype ('{bygningstypekode}') er ikke tillatt.");
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,
Expand All @@ -94,6 +114,6 @@ public CalculationResult Calculate(string tiltakstypekode, string bygningstypeko
{
throw;
}
}
}
}
}

0 comments on commit 744dcdf

Please sign in to comment.