diff --git a/H.Core.Test/Services/InitializationServiceTest.cs b/H.Core.Test/Services/InitializationServiceTest.cs index fff72ca4..80d43169 100644 --- a/H.Core.Test/Services/InitializationServiceTest.cs +++ b/H.Core.Test/Services/InitializationServiceTest.cs @@ -15,6 +15,7 @@ using H.Core.Models.Animals.Beef; using H.Core.Models.LandManagement.Fields; using System.Collections.ObjectModel; +using H.Core.Models.Animals.Sheep; namespace H.Core.Test.Services { @@ -588,6 +589,99 @@ public void InitializeCattleFeedingActivityCoefficientNullComponent(){ } } + [TestMethod] + public void InitializeLivestockCoefficientSheep() + { + var farm = new Farm(); + var ram = new AnimalGroup() + { + GroupType = AnimalType.Ram, + ManagementPeriods = + { + new ManagementPeriod + { + AnimalType =AnimalType.Ram, + GainCoefficientA = 0, + GainCoefficientB = 0, + WoolProduction = 0, + StartWeight = 0, + EndWeight = 0, + } + }, + }; + var ramComponent = new RamsComponent(); + ramComponent.Groups.Add(ram); + + farm.Components.Add(ramComponent); + + _initializationService.InitializeLivestockCoefficientSheep(farm); + Assert.AreEqual(4, ram.ManagementPeriods.First().WoolProduction); + Assert.AreEqual(125, ram.ManagementPeriods.First().StartWeight); + Assert.AreEqual(125, ram.ManagementPeriods.First().EndWeight); + Assert.AreEqual(2.5, ram.ManagementPeriods.First().GainCoefficientA); + Assert.AreEqual(0.35, ram.ManagementPeriods.First().GainCoefficientB); + } + + [TestMethod] + public void InitializeLivestockCoefficientMultipleComponents() + { + var farm = new Farm(); + var ewe = new AnimalGroup() + { + GroupType = AnimalType.Ewes, + ManagementPeriods = + { + new ManagementPeriod + { + AnimalType =AnimalType.Ewes, + GainCoefficientA = 0, + GainCoefficientB = 0, + WoolProduction = 0, + StartWeight = 0, + EndWeight = 0, + } + }, + }; + var weanedLamb = new AnimalGroup() + { + GroupType = AnimalType.WeanedLamb, + ManagementPeriods = + { + new ManagementPeriod + { + AnimalType =AnimalType.WeanedLamb, + GainCoefficientA = 0, + GainCoefficientB = 0, + WoolProduction = 0, + StartWeight = 0, + EndWeight = 0, + } + }, + }; + var eweAndLambsComponent = new EwesAndLambsComponent(); + eweAndLambsComponent.Groups.Add(ewe); + eweAndLambsComponent.Groups.Add(weanedLamb); + + farm.Components.Add(eweAndLambsComponent); + + _initializationService.InitializeLivestockCoefficientSheep(farm); + Assert.AreEqual(0.45, ewe.ManagementPeriods.First().GainCoefficientB); + Assert.AreEqual(0.385, weanedLamb.ManagementPeriods.First().GainCoefficientB); + } + + [TestMethod] + public void InitializeLivestockCoefficientNullArguments() + { + Farm farm = new Farm(); + try + { + _initializationService.InitializeLivestockCoefficientSheep(farm); //passing null farm + } + catch (Exception ex) + { + Assert.Fail(ex.Message); + } + } #endregion } } diff --git a/H.Core.Test/UnitTestBase.cs b/H.Core.Test/UnitTestBase.cs index 0c62d231..4091311e 100644 --- a/H.Core.Test/UnitTestBase.cs +++ b/H.Core.Test/UnitTestBase.cs @@ -48,6 +48,8 @@ public abstract class UnitTestBase protected IPCCTier2SoilCarbonCalculator _ipcc; protected IFieldResultsService _fieldResultsService; protected Mock _slcClimateProvider; + protected Mock _mockInitializationService; + protected IInitializationService _initializationService; #endregion @@ -59,6 +61,9 @@ static UnitTestBase() protected UnitTestBase() { + + _initializationService = new InitializationService(); + _mockFarmResultService = new Mock(); _mockFarmResultServiceObject = _mockFarmResultService.Object; diff --git a/H.Core/Services/IInitializationService.cs b/H.Core/Services/IInitializationService.cs index 9e7a7502..41a71aec 100644 --- a/H.Core/Services/IInitializationService.cs +++ b/H.Core/Services/IInitializationService.cs @@ -33,6 +33,7 @@ public interface IInitializationService void InitializeManureExcretionRate(Farm farm); void InitializeAnnualEntericMethaneRate(Farm farm); void InitializeAnnualEntericMethaneRate(ManagementPeriod managementPeriod); + void InitializeLivestockCoefficientSheep(Farm farm); } } diff --git a/H.Core/Services/InitializationService.cs b/H.Core/Services/InitializationService.cs index 8b13ed7b..227deeb3 100644 --- a/H.Core/Services/InitializationService.cs +++ b/H.Core/Services/InitializationService.cs @@ -36,6 +36,7 @@ public class InitializationService : IInitializationService private readonly Table_17_Beef_Dairy_Cattle_Feeding_Activity_Coefficient_Provider _beefDairyCattleFeedingActivityCoefficientProvider; private readonly Table_51_Herbicide_Energy_Estimates_Provider _herbicideEnergyEstimatesProvider; private readonly Table_27_Enteric_CH4_Swine_Poultry_OtherLivestock_Provider _entericMethaneProvider; + private readonly Table_31_Swine_VS_Excretion_For_Diets_Provider _volatileExcretionForDietsProvider; #endregion @@ -58,6 +59,7 @@ public InitializationService() _herbicideEnergyEstimatesProvider = new Table_51_Herbicide_Energy_Estimates_Provider(); _defaultManureExcretionRateProvider = new Table_29_Default_Manure_Excreted_Provider(); _entericMethaneProvider = new Table_27_Enteric_CH4_Swine_Poultry_OtherLivestock_Provider(); + _volatileExcretionForDietsProvider = new Table_31_Swine_VS_Excretion_For_Diets_Provider(); } #endregion @@ -100,11 +102,17 @@ public void ReInitializeFarms(IEnumerable farms) // Table 21 this.InitializeMilkProduction(farm); + // Table 22 + this.InitializeLivestockCoefficientSheep(farm); + // Table 27 this.InitializeAnnualEntericMethaneRate(farm); // Table 29 this.InitializeManureExcretionRate(farm); + + // Table 31 + this.InitializeVolatileSolidsExcretion(farm); // Table 35 this.InitializeMethaneProducingCapacity(farm); @@ -129,6 +137,24 @@ public void ReInitializeFarms(IEnumerable farms) } } + private void InitializeVolatileSolidsExcretion(Farm farm) + { + if (farm != null && farm.DefaultSoilData != null) + { + var province = farm.DefaultSoilData.Province; + + foreach (var managementPeriod in farm.GetAllManagementPeriods().Where(x => x.AnimalType.IsSwineType())) + { + this.InitializeVolatileSolidsExcretion(managementPeriod, province); + } + } + } + + public void InitializeVolatileSolidsExcretion(ManagementPeriod managementPeriod, Province province) + { + + } + public void InitializeAnnualEntericMethaneRate(Farm farm) { if (farm != null) @@ -159,6 +185,7 @@ public void InitializeManureExcretionRate(Farm farm) } } } + public void InitializeManureExcretionRate(ManagementPeriod managementPeriod) { if (managementPeriod != null && managementPeriod.HousingDetails != null) @@ -166,15 +193,14 @@ public void InitializeManureExcretionRate(ManagementPeriod managementPeriod) managementPeriod.ManureDetails.ManureExcretionRate = _defaultManureExcretionRateProvider.GetManureExcretionRate(managementPeriod.AnimalType); } } + public void InitializeMethaneProducingCapacity(Farm farm) { if (farm != null) { foreach (var managementPeriod in farm.GetAllManagementPeriods()) - { - this.InitializeMethaneProducingCapacity(managementPeriod); - - + { + this.InitializeMethaneProducingCapacity(managementPeriod); } } } @@ -466,6 +492,31 @@ public void InitializeParameterAdjustmenstForManure(Farm farm) } } } + + public void InitializeLivestockCoefficientSheep(Farm farm) + { + if (farm != null) + { + foreach (var managementPeriod in farm.GetAllManagementPeriods()) + { + if (managementPeriod != null && (managementPeriod.AnimalType == AnimalType.Ewes || managementPeriod.AnimalType == AnimalType.Ram || managementPeriod.AnimalType == AnimalType.WeanedLamb)) + { + var result = + _sheepProvider.GetCoefficientsByAnimalType(managementPeriod.AnimalType) as + Table_22_Livestock_Coefficients_Sheep_Data; + if (result != null) + { + managementPeriod.WoolProduction = result.WoolProduction; + managementPeriod.GainCoefficientA = result.CoefficientA; + managementPeriod.GainCoefficientB = result.CoefficientB; + managementPeriod.StartWeight = result.DefaultInitialWeight; + managementPeriod.EndWeight = result.DefaultFinalWeight; + } + } + } + } + } + #endregion #region Private Methods