private void ReCalculateManure(int id) { Utility.CalculateNutrients calculateNutrients = new CalculateNutrients(_env, _ud, _sd); NOrganicMineralizations nOrganicMineralizations = new NOrganicMineralizations(); List <Field> flds = _ud.GetFields(); foreach (var fld in flds) { List <NutrientManure> mans = _ud.GetFieldNutrientsManures(fld.fieldName); foreach (var nm in mans) { if (id.ToString() == nm.manureId) { int regionid = _ud.FarmDetails().farmRegion.Value; Region region = _sd.GetRegion(regionid); nOrganicMineralizations = calculateNutrients.GetNMineralization(Convert.ToInt16(nm.manureId), region.locationid); string avail = (nOrganicMineralizations.OrganicN_FirstYear * 100).ToString("###"); string nh4 = (calculateNutrients.GetAmmoniaRetention(Convert.ToInt16(nm.manureId), Convert.ToInt16(nm.applicationId)) * 100).ToString("###"); NutrientInputs nutrientInputs = new NutrientInputs(); calculateNutrients.manure = nm.manureId; calculateNutrients.applicationSeason = nm.applicationId; calculateNutrients.applicationRate = Convert.ToDecimal(nm.rate); calculateNutrients.applicationRateUnits = nm.unitId; calculateNutrients.ammoniaNRetentionPct = Convert.ToDecimal(nh4); calculateNutrients.firstYearOrganicNAvailablityPct = Convert.ToDecimal(avail); calculateNutrients.GetNutrientInputs(nutrientInputs); nm.yrN = nutrientInputs.N_FirstYear; nm.yrP2o5 = nutrientInputs.P2O5_FirstYear; nm.yrK2o = nutrientInputs.K2O_FirstYear; nm.ltN = nutrientInputs.N_LongTerm; nm.ltP2o5 = nutrientInputs.P2O5_LongTerm; nm.ltK2o = nutrientInputs.K2O_LongTerm; _ud.UpdateFieldNutrientsManure(fld.fieldName, nm); } } } }
public NutrientInputs GetNutrientInputs( FarmManure farmManure, Region region, decimal applicationRate, string applicationRateUnits, decimal ammoniaNRetentionPct, decimal firstYearOrganicNAvailablityPct) { var nutrientInputs = new NutrientInputs(); var _cf = _sd.GetConversionFactor(); decimal potassiumAvailabilityFirstYear = _cf.PotassiumAvailabilityFirstYear; decimal potassiumAvailabilityLongTerm = _cf.PotassiumAvailabilityLongTerm; decimal potassiumKtoK2Oconversion = _cf.PotassiumKtoK2OConversion; decimal phosphorousAvailabilityFirstYear = _cf.PhosphorousAvailabilityFirstYear; decimal phosphorousAvailabilityLongTerm = _cf.PhosphorousAvailabilityLongTerm; decimal phosphorousPtoP2O5Kconversion = _cf.PhosphorousPtoP2O5Conversion; decimal lbPerTonConversion = _cf.PoundPerTonConversion; decimal tenThousand = 10000; // get conversion factor for selected units to lb/ac Unit myunit = _sd.GetUnit(applicationRateUnits); decimal conversion = myunit.ConversionlbTon; // for solid manures specified in cubic yards per ac, convert application rate to tons/ac if (myunit.Id == 6 && farmManure.SolidLiquid.ToUpper() == "SOLID") { Manure manure = _sd.GetManure(farmManure.ManureId); applicationRate = applicationRate * manure.CubicYardConversion; } // get potassium first year nutrientInputs.K2O_FirstYear = Convert.ToInt32(decimal.Multiply(applicationRate, farmManure.Potassium) * lbPerTonConversion * potassiumKtoK2Oconversion * potassiumAvailabilityFirstYear * conversion); // get potassium long term nutrientInputs.K2O_LongTerm = Convert.ToInt32(decimal.Multiply(applicationRate, farmManure.Potassium) * lbPerTonConversion * potassiumKtoK2Oconversion * potassiumAvailabilityLongTerm * conversion); // get phosphorous first year nutrientInputs.P2O5_FirstYear = Convert.ToInt32(decimal.Multiply(applicationRate, farmManure.Phosphorous) * lbPerTonConversion * phosphorousPtoP2O5Kconversion * phosphorousAvailabilityFirstYear * conversion); // get phosphorous long term nutrientInputs.P2O5_LongTerm = Convert.ToInt32(decimal.Multiply(applicationRate, farmManure.Phosphorous) * lbPerTonConversion * phosphorousPtoP2O5Kconversion * phosphorousAvailabilityLongTerm * conversion); // get N values // Organic N% = Total N% - NH4-N ppm / 10,000 decimal organicN = farmManure.Nitrogen - Convert.ToDecimal(farmManure.Ammonia) / tenThousand; NOrganicMineralizations nOrganicMineralizations = new NOrganicMineralizations(); nOrganicMineralizations = GetNMineralization(farmManure, region.LocationId); nOrganicMineralizations.OrganicN_FirstYear = firstYearOrganicNAvailablityPct / 100; // get data from screen //decimal ammoniaRetention = GetAmmoniaRetention(mymanure.id, Convert.ToInt32(applicationSeason)); decimal ammoniaRetention = ammoniaNRetentionPct / 100; // get data from screen // N 1st year lb/ton = [NH4-N ppm/10,000 * NH4 retention + NO3-N/10,000 + Organic N % * 1st yr Mineralization] * 20 decimal a = decimal.Divide(farmManure.Ammonia, tenThousand) * ammoniaRetention; decimal b1 = decimal.Multiply(organicN, nOrganicMineralizations.OrganicN_FirstYear); //E07US20 decimal c1 = a + b1 + Convert.ToDecimal(farmManure.Nitrate) / tenThousand; decimal N_Firstyear = decimal.Multiply(c1, lbPerTonConversion); nutrientInputs.N_FirstYear = Convert.ToInt32(applicationRate * N_Firstyear * conversion); // same for long term decimal b2 = decimal.Multiply(organicN, nOrganicMineralizations.OrganicN_LongTerm); //E07US20 decimal c2 = a + b2 + Convert.ToDecimal(farmManure.Nitrate) / tenThousand; decimal N_LongTerm = decimal.Multiply(c2, lbPerTonConversion); nutrientInputs.N_LongTerm = Convert.ToInt32(applicationRate * N_LongTerm * conversion); return(nutrientInputs); }