private async Task <CalcFeedAreaModel> GetFeedAreaAsync(string fieldName)
        {
            //var analytic = _ud.GetFeedForageAnalysis(fieldName);
            var field  = _ud.GetFieldDetails(fieldName);
            var region = _sd.GetRegion(_ud.FarmDetails().FarmRegion.Value);

            CalcFeedAreaModel model = null;

            if (field.FeedForageAnalyses != null && field.FeedForageAnalyses.Any())
            {
                model = new CalcFeedAreaModel
                {
                    FieldId              = field.Id,
                    FieldName            = fieldName,
                    NAgroBalance         = _feedCalculator.GetNitrogenAgronomicBalance(field, region),
                    P205AgroBalance      = _feedCalculator.GetP205AgronomicBalance(field),
                    K20AgroBalance       = _feedCalculator.GetK20AgronomicBalance(field),
                    NCropRemovalValue    = _feedCalculator.GetNitrogenCropRemovalValue(field, region),
                    P205CropRemovalValue = _feedCalculator.GetP205CropRemovalValue(field),
                    K20CropRemovalValue  = _feedCalculator.GetK20CropRemovalValue(field)
                };
            }

            return(await Task.FromResult(model));
        }
Ejemplo n.º 2
0
        public ChemicalBalances GetChemicalBalances(Field field, int farmRegionId, string year)
        {
            chemicalBalances.balance_AgrN     = 0;
            chemicalBalances.balance_AgrP2O5  = 0;
            chemicalBalances.balance_AgrK2O   = 0;
            chemicalBalances.balance_CropN    = 0;
            chemicalBalances.balance_CropP2O5 = 0;
            chemicalBalances.balance_CropK2O  = 0;

            //List<FieldCrop> crps = _ud.GetFieldCrops(fldName);
            foreach (var c in field.Crops)
            {
                chemicalBalances.balance_AgrN     -= Convert.ToInt64(c.reqN);
                chemicalBalances.balance_AgrP2O5  -= Convert.ToInt64(c.reqP2o5);
                chemicalBalances.balance_AgrK2O   -= Convert.ToInt64(c.reqK2o);
                chemicalBalances.balance_CropN    -= Convert.ToInt64(c.remN);
                chemicalBalances.balance_CropP2O5 -= Convert.ToInt64(c.remP2o5);
                chemicalBalances.balance_CropK2O  -= Convert.ToInt64(c.remK2o);
            }

            if (field.HasNutrients)
            {
                //List<NutrientManure> manures = _ud.GetFieldNutrientsManures(fldName);
                foreach (var m in field.Nutrients.nutrientManures)
                {
                    chemicalBalances.balance_AgrN     += Convert.ToInt64(m.yrN);
                    chemicalBalances.balance_AgrP2O5  += Convert.ToInt64(m.yrP2o5);
                    chemicalBalances.balance_AgrK2O   += Convert.ToInt64(m.yrK2o);
                    chemicalBalances.balance_CropN    += Convert.ToInt64(m.ltN);
                    chemicalBalances.balance_CropP2O5 += Convert.ToInt64(m.ltP2o5);
                    chemicalBalances.balance_CropK2O  += Convert.ToInt64(m.ltK2o);
                }

                //List<NutrientFertilizer> fertilizers = _ud.GetFieldNutrientsFertilizers(fldName);
                foreach (var f in field.Nutrients.nutrientFertilizers)
                {
                    chemicalBalances.balance_AgrN     += Convert.ToInt64(f.fertN);
                    chemicalBalances.balance_AgrP2O5  += Convert.ToInt64(f.fertP2o5);
                    chemicalBalances.balance_AgrK2O   += Convert.ToInt64(f.fertK2o);
                    chemicalBalances.balance_CropN    += Convert.ToInt64(f.fertN);
                    chemicalBalances.balance_CropP2O5 += Convert.ToInt64(f.fertP2o5);
                    chemicalBalances.balance_CropK2O  += Convert.ToInt64(f.fertK2o);
                }

                //List<NutrientOther> others = _ud.GetFieldNutrientsOthers(fldName);
                foreach (var m in field.Nutrients.nutrientOthers)
                {
                    chemicalBalances.balance_AgrN     += Convert.ToInt64(m.ltN);
                    chemicalBalances.balance_AgrP2O5  += Convert.ToInt64(m.ltP2o5);
                    chemicalBalances.balance_AgrK2O   += Convert.ToInt64(m.ltK);
                    chemicalBalances.balance_CropN    += Convert.ToInt64(m.yrN);
                    chemicalBalances.balance_CropP2O5 += Convert.ToInt64(m.yrP2o5);
                    chemicalBalances.balance_CropK2O  += Convert.ToInt64(m.yrK);
                }
            }

            if (field.IsSeasonalFeedingArea && field.FeedForageAnalyses != null && field.FeedForageAnalyses.Any())
            {
                var region = _sd.GetRegion(farmRegionId);
                chemicalBalances.balance_AgrN     += Convert.ToInt64(_feedCalculator.GetNitrogenAgronomicBalance(field, region));
                chemicalBalances.balance_AgrP2O5  += Convert.ToInt64(_feedCalculator.GetP205AgronomicBalance(field));
                chemicalBalances.balance_AgrK2O   += Convert.ToInt64(_feedCalculator.GetK20AgronomicBalance(field));
                chemicalBalances.balance_CropN    += Convert.ToInt64(_feedCalculator.GetNitrogenCropRemovalValue(field, region));
                chemicalBalances.balance_CropP2O5 += Convert.ToInt64(_feedCalculator.GetP205CropRemovalValue(field));
                chemicalBalances.balance_CropK2O  += Convert.ToInt64(_feedCalculator.GetK20CropRemovalValue(field));
            }

            // include the Nitrogren credit as a result of adding manure in previous years
            // lookup default Nitrogen credit.
            //Field field = _ud.GetFieldDetails(fldName);
            if (field.Crops != null)
            {
                if (field.PreviousYearManureApplicationNitrogenCredit != null && field.Crops.Count() > 0)
                {
                    chemicalBalances.balance_AgrN += Convert.ToInt32(field.PreviousYearManureApplicationNitrogenCredit);
                }
                else
                {
                    // accomodate previous version of farm data - lookup default Nitrogen credit.
                    chemicalBalances.balance_AgrN += CalcPrevYearManureApplDefault(field);
                }
                if (field.SoilTest != null)
                {
                    if (_sd.IsNitrateCreditApplicable(farmRegionId, field.SoilTest.sampleDate, Convert.ToInt16(year)))
                    {
                        if (field.SoilTestNitrateOverrideNitrogenCredit != null && field.Crops.Count() > 0)
                        {
                            chemicalBalances.balance_AgrN += Convert.ToInt32(Math.Round(Convert.ToDecimal(field.SoilTestNitrateOverrideNitrogenCredit)));
                        }
                        else
                        {
                            // accomodate previous version of farm data - lookup default Nitrogen credit.
                            chemicalBalances.balance_AgrN += Convert.ToInt32(Math.Round(CalcSoitTestNitrateDefault(field)));
                        }
                    }
                }
            }

            return(chemicalBalances);
        }
Ejemplo n.º 3
0
        public void GetK20AgronomicBalanceShouldBeCorrectValue()
        {
            var result = _calculator.GetK20AgronomicBalance(GetTestField());

            result.ShouldBe(555);
        }