/// <summary> /// Determine the labour required for this activity based on LabourRequired items in tree /// </summary> /// <param name="requirement">Labour requirement model</param> /// <returns></returns> public override GetDaysLabourRequiredReturnArgs GetDaysLabourRequired(LabourRequirement requirement) { IEnumerable <Ruminant> herd = CurrentHerd(false); int head = herd.Where(a => a.Weaned == false).Count(); double daysNeeded = 0; switch (requirement.UnitType) { case LabourUnitType.Fixed: daysNeeded = requirement.LabourPerUnit; break; case LabourUnitType.perHead: daysNeeded = head * requirement.LabourPerUnit; break; case LabourUnitType.perAE: double sumAE = 0; daysNeeded = sumAE * requirement.LabourPerUnit; break; default: throw new Exception(String.Format("LabourUnitType {0} is not supported for {1} in {2}", requirement.UnitType, requirement.Name, this.Name)); } return(new GetDaysLabourRequiredReturnArgs(daysNeeded, TransactionCategory, this.PredictedHerdName)); }
/// <inheritdoc/> public override GetDaysLabourRequiredReturnArgs GetDaysLabourRequired(LabourRequirement requirement) { double breeders = SelectedOtherAnimalsType.Cohorts.Where(a => a.Age >= this.BreedingAge).Sum(b => b.Number); if (breeders == 0) { return(new GetDaysLabourRequiredReturnArgs(0, TransactionCategory, SelectedOtherAnimalsType.NameWithParent)); } double daysNeeded = 0; switch (requirement.UnitType) { case LabourUnitType.Fixed: daysNeeded = requirement.LabourPerUnit; break; case LabourUnitType.perHead: daysNeeded = Math.Ceiling(breeders / requirement.UnitSize) * requirement.LabourPerUnit; break; default: throw new Exception(String.Format("LabourUnitType {0} is not supported for {1} in {2}", requirement.UnitType, requirement.Name, this.Name)); } return(new GetDaysLabourRequiredReturnArgs(daysNeeded, TransactionCategory, SelectedOtherAnimalsType.NameWithParent)); }
/// <summary> /// Determines how much labour is required from this activity based on the requirement provided /// </summary> /// <param name="requirement">The details of how labour are to be provided</param> /// <returns></returns> public override double GetDaysLabourRequired(LabourRequirement requirement) { double daysNeeded; double numberUnits; switch (requirement.UnitType) { case LabourUnitType.Fixed: daysNeeded = requirement.LabourPerUnit; break; case LabourUnitType.perHa: numberUnits = (pasture.Manager.Area * (Resources.GetResourceGroupByType(typeof(Land)) as Land).UnitsOfAreaToHaConversion) / requirement.UnitSize; if (requirement.WholeUnitBlocks) { numberUnits = Math.Ceiling(numberUnits); } daysNeeded = numberUnits * requirement.LabourPerUnit; break; default: throw new Exception(String.Format("LabourUnitType {0} is not supported for {1} in {2}", requirement.UnitType, requirement.Name, this.Name)); } return(daysNeeded); }
/// <summary> /// Determine the labour required for this activity based on LabourRequired items in tree /// </summary> /// <param name="requirement">Labour requirement model</param> /// <returns></returns> public override double GetDaysLabourRequired(LabourRequirement requirement) { List <Ruminant> herd = CurrentHerd(false); int head = herd.Where(a => a.Weaned == false).Count(); double daysNeeded = 0; switch (requirement.UnitType) { case LabourUnitType.Fixed: daysNeeded = requirement.LabourPerUnit; break; case LabourUnitType.perHead: daysNeeded = head * requirement.LabourPerUnit; break; case LabourUnitType.perUnit: double numberUnits = head / requirement.UnitSize; if (requirement.WholeUnitBlocks) { numberUnits = Math.Ceiling(numberUnits); } daysNeeded = numberUnits * requirement.LabourPerUnit; break; default: throw new Exception(String.Format("LabourUnitType {0} is not supported for {1} in {2}", requirement.UnitType, requirement.Name, this.Name)); } return(daysNeeded); }
/// <summary> /// Determine the labour required for this activity based on LabourRequired items in tree /// </summary> /// <param name="requirement">Labour requirement model</param> /// <returns></returns> public override GetDaysLabourRequiredReturnArgs GetDaysLabourRequired(LabourRequirement requirement) { double daysNeeded; // TODO add labour multiplier if pasture below given amount and difficult to cut // as per IAT rules below 500kg/ha switch (requirement.UnitType) { case LabourUnitType.perKg: daysNeeded = requirement.LabourPerUnit * AmountHarvested; break; case LabourUnitType.perUnit: double numberUnits = AmountHarvested / requirement.UnitSize; if (requirement.WholeUnitBlocks) { numberUnits = Math.Ceiling(numberUnits); } daysNeeded = requirement.LabourPerUnit * numberUnits; break; case LabourUnitType.Fixed: daysNeeded = requirement.LabourPerUnit; break; default: throw new Exception(String.Format("LabourUnitType {0} is not supported for {1} in {2}", requirement.UnitType, requirement.Name, this.Name)); } return(new GetDaysLabourRequiredReturnArgs(daysNeeded, "Cut and carry", pasture.NameWithParent)); }
/// <summary> /// Determines how much labour is required from this activity based on the requirement provided /// </summary> /// <param name="requirement">The details of how labour are to be provided</param> /// <returns></returns> public override GetDaysLabourRequiredReturnArgs GetDaysLabourRequired(LabourRequirement requirement) { labourRequirement = requirement; //double adultEquivalents = herd.Sum(a => a.AdultEquivalent); double daysNeeded; switch (requirement.UnitType) { case LabourUnitType.Fixed: daysNeeded = requirement.LabourPerUnit; break; case LabourUnitType.perHead: double numberUnits = numberToTag / requirement.UnitSize; if (requirement.WholeUnitBlocks) { numberUnits = Math.Ceiling(numberUnits); } daysNeeded = numberUnits * requirement.LabourPerUnit; break; default: throw new Exception(String.Format("LabourUnitType {0} is not supported for {1} in {2}", requirement.UnitType, requirement.Name, this.Name)); } return(new GetDaysLabourRequiredReturnArgs(daysNeeded, "Mark", this.PredictedHerdName)); }
/// <summary> /// Determines how much labour is required from this activity based on the requirement provided /// </summary> /// <param name="requirement">The details of how labour are to be provided</param> /// <returns></returns> public override GetDaysLabourRequiredReturnArgs GetDaysLabourRequired(LabourRequirement requirement) { double amountAvailable = 0; // determine wet weight to move foreach (ManureStoreUncollected msu in manureStore.UncollectedStores) { amountAvailable = msu.Pools.Sum(a => a.WetWeight(manureStore.MoistureDecayRate, manureStore.ProportionMoistureFresh)); } double daysNeeded = 0; switch (requirement.UnitType) { case LabourUnitType.perUnit: daysNeeded = requirement.LabourPerUnit * (amountAvailable / requirement.UnitSize); break; case LabourUnitType.Fixed: daysNeeded = requirement.LabourPerUnit; break; default: throw new Exception(String.Format("LabourUnitType {0} is not supported for {1} in {2}", requirement.UnitType, requirement.Name, this.Name)); } return(new GetDaysLabourRequiredReturnArgs(daysNeeded, "Collect manure", manureStore.NameWithParent)); }
/// <summary> /// Determine the labour required for this activity based on LabourRequired items in tree /// </summary> /// <param name="requirement">Labour requirement model</param> /// <returns></returns> public override GetDaysLabourRequiredReturnArgs GetDaysLabourRequired(LabourRequirement requirement) { List <RuminantFemale> herd = this.CurrentHerd(true).Where(a => a.Gender == Sex.Female).Cast <RuminantFemale>().Where(a => a.IsLactating == true & a.SucklingOffspringList.Count() == 0).ToList(); int head = herd.Count(); double daysNeeded = 0; switch (requirement.UnitType) { case LabourUnitType.Fixed: daysNeeded = requirement.LabourPerUnit; break; case LabourUnitType.perHead: double numberUnits = head / requirement.UnitSize; if (requirement.WholeUnitBlocks) { numberUnits = Math.Ceiling(numberUnits); } daysNeeded = numberUnits * requirement.LabourPerUnit; break; default: throw new Exception(String.Format("LabourUnitType {0} is not supported for {1} in {2}", requirement.UnitType, requirement.Name, this.Name)); } return(new GetDaysLabourRequiredReturnArgs(daysNeeded, "Milking", this.PredictedHerdName)); }
/// <inheritdoc/> public override GetDaysLabourRequiredReturnArgs GetDaysLabourRequired(LabourRequirement requirement) { double allIndividuals = 0; foreach (var group in FindAllChildren <OtherAnimalsFilterGroup>()) { double total = 0; foreach (OtherAnimalsTypeCohort item in group.Filter(group.SelectedOtherAnimalsType.Cohorts)) { total += item.Number * ((item.Age < group.SelectedOtherAnimalsType.AgeWhenAdult) ? 0.1 : 1); } allIndividuals += total; } double daysNeeded; switch (requirement.UnitType) { case LabourUnitType.Fixed: daysNeeded = requirement.LabourPerUnit; break; case LabourUnitType.perHead: daysNeeded = Math.Ceiling(allIndividuals / requirement.UnitSize) * requirement.LabourPerUnit; break; default: throw new Exception(string.Format("LabourUnitType {0} is not supported for {1} in {2}", requirement.UnitType, requirement.Name, this.Name)); } return(new GetDaysLabourRequiredReturnArgs(daysNeeded, TransactionCategory, "Other animals")); }
/// <inheritdoc/> public override GetDaysLabourRequiredReturnArgs GetDaysLabourRequired(LabourRequirement requirement) { double daysNeeded; // get amount to processed double amountToProcess = resourceTypeProcessModel.Amount; if (Reserve > 0) { amountToProcess = Math.Min(amountToProcess, Reserve); } switch (requirement.UnitType) { case LabourUnitType.Fixed: daysNeeded = requirement.LabourPerUnit; break; case LabourUnitType.perUnit: daysNeeded = amountToProcess / requirement.UnitSize * requirement.LabourPerUnit; break; default: throw new Exception(String.Format("LabourUnitType {0} is not supported for {1} in {2}", requirement.UnitType, requirement.Name, this.Name)); } return(new GetDaysLabourRequiredReturnArgs(daysNeeded, TransactionCategory, (resourceTypeCreatedModel as CLEMModel).NameWithParent)); }
/// <inheritdoc/> public override GetDaysLabourRequiredReturnArgs GetDaysLabourRequired(LabourRequirement requirement) { double amountAvailable = 0; // determine wet weight to move if (manureStore != null) { ManureStoreUncollected msu = manureStore.UncollectedStores.Where(a => a.Name.ToLower() == GrazeFoodStoreTypeName.ToLower()).FirstOrDefault(); if (msu != null) amountAvailable = msu.Pools.Sum(a => a.WetWeight(manureStore.MoistureDecayRate, manureStore.ProportionMoistureFresh)); } double daysNeeded = 0; double numberUnits = 0; switch (requirement.UnitType) { case LabourUnitType.perUnit: numberUnits = amountAvailable / requirement.UnitSize; if (requirement.WholeUnitBlocks) numberUnits = Math.Ceiling(numberUnits); daysNeeded = numberUnits * requirement.LabourPerUnit; break; case LabourUnitType.Fixed: daysNeeded = requirement.LabourPerUnit; break; default: throw new Exception(String.Format("LabourUnitType {0} is not supported for {1} in {2}", requirement.UnitType, requirement.Name, this.Name)); } return new GetDaysLabourRequiredReturnArgs(daysNeeded, TransactionCategory, manureStore.NameWithParent); }
/// <summary> /// Determines how much labour is required from this activity based on the requirement provided /// </summary> /// <param name="requirement">The details of how labour are to be provided</param> /// <returns></returns> public override double GetDaysLabourRequired(LabourRequirement requirement) { double allIndividuals = 0; foreach (OtherAnimalsFilterGroup filtergroup in Apsim.Children(this, typeof(OtherAnimalsFilterGroup))) { double total = 0; foreach (OtherAnimalsTypeCohort item in (filtergroup as OtherAnimalsFilterGroup).SelectedOtherAnimalsType.Cohorts.Filter(filtergroup as OtherAnimalsFilterGroup)) { total += item.Number * ((item.Age < (filtergroup as OtherAnimalsFilterGroup).SelectedOtherAnimalsType.AgeWhenAdult) ? 0.1 : 1); } allIndividuals += total; } double daysNeeded; switch (requirement.UnitType) { case LabourUnitType.Fixed: daysNeeded = requirement.LabourPerUnit; break; case LabourUnitType.perHead: daysNeeded = Math.Ceiling(allIndividuals / requirement.UnitSize) * requirement.LabourPerUnit; break; default: throw new Exception(String.Format("LabourUnitType {0} is not supported for {1} in {2}", requirement.UnitType, requirement.Name, this.Name)); } return(daysNeeded); }
/// <summary> /// Determines how much labour is required from this activity based on the requirement provided /// </summary> /// <param name="requirement">The details of how labour are to be provided</param> /// <returns></returns> public override GetDaysLabourRequiredReturnArgs GetDaysLabourRequired(LabourRequirement requirement) { List <Ruminant> herd = CurrentHerd(false); int head = 0; double adultEquivalents = 0; foreach (IFilterGroup child in Children.Where(a => a.GetType().ToString().Contains("RuminantFeedGroup"))) { var subherd = herd.FilterRuminants(child).ToList(); head += subherd.Count(); adultEquivalents += subherd.Sum(a => a.AdultEquivalent); } double daysNeeded = 0; double numberUnits = 0; switch (requirement.UnitType) { case LabourUnitType.Fixed: daysNeeded = requirement.LabourPerUnit; break; case LabourUnitType.perHead: numberUnits = head / requirement.UnitSize; if (requirement.WholeUnitBlocks) { numberUnits = Math.Ceiling(numberUnits); } daysNeeded = numberUnits * requirement.LabourPerUnit; break; case LabourUnitType.perAE: numberUnits = adultEquivalents / requirement.UnitSize; if (requirement.WholeUnitBlocks) { numberUnits = Math.Ceiling(numberUnits); } daysNeeded = numberUnits * requirement.LabourPerUnit; break; case LabourUnitType.perKg: daysNeeded = feedEstimated * requirement.LabourPerUnit; break; case LabourUnitType.perUnit: numberUnits = feedEstimated / requirement.UnitSize; if (requirement.WholeUnitBlocks) { numberUnits = Math.Ceiling(numberUnits); } daysNeeded = numberUnits * requirement.LabourPerUnit; break; default: throw new Exception(String.Format("LabourUnitType {0} is not supported for {1} in {2}", requirement.UnitType, requirement.Name, this.Name)); } return(new GetDaysLabourRequiredReturnArgs(daysNeeded, "Feed", this.PredictedHerdName)); }
/// <inheritdoc/> public override GetDaysLabourRequiredReturnArgs GetDaysLabourRequired(LabourRequirement requirement) { IEnumerable <Ruminant> herd = CurrentHerd(false); double adultEquivalents = herd.Sum(a => a.AdultEquivalent); double daysNeeded = 0; double numberUnits = 0; labourRequirement = requirement; if (herd.Any()) { switch (requirement.UnitType) { case LabourUnitType.Fixed: daysNeeded = requirement.LabourPerUnit; break; case LabourUnitType.perHead: int head = herd.Count(); numberUnits = head / requirement.UnitSize; if (requirement.WholeUnitBlocks) { numberUnits = Math.Ceiling(numberUnits); } daysNeeded = numberUnits * requirement.LabourPerUnit; break; case LabourUnitType.perAE: numberUnits = adultEquivalents / requirement.UnitSize; if (requirement.WholeUnitBlocks) { numberUnits = Math.Ceiling(numberUnits); } daysNeeded = numberUnits * requirement.LabourPerUnit; break; case LabourUnitType.perKg: daysNeeded = herd.Sum(a => a.Wool) * requirement.LabourPerUnit; break; case LabourUnitType.perUnit: numberUnits = herd.Sum(a => a.Wool) / requirement.UnitSize; if (requirement.WholeUnitBlocks) { numberUnits = Math.Ceiling(numberUnits); } daysNeeded = numberUnits * requirement.LabourPerUnit; break; default: throw new Exception(String.Format("LabourUnitType {0} is not supported for {1} in {2}", requirement.UnitType, requirement.Name, this.Name)); } } return(new GetDaysLabourRequiredReturnArgs(daysNeeded, TransactionCategory, this.PredictedHerdName)); }
/// <inheritdoc/> public override GetDaysLabourRequiredReturnArgs GetDaysLabourRequired(LabourRequirement requirement) { double daysNeeded = 0; // get fixed days per LabourRequirement if (labourRequired != null) { daysNeeded = labourRequired.LabourPerUnit; } return(new GetDaysLabourRequiredReturnArgs(daysNeeded, TransactionCategory, null)); }
/// <summary> /// Determines how much labour is required from this activity based on the requirement provided /// </summary> /// <param name="requirement">The details of how labour are to be provided</param> /// <returns></returns> public override double GetDaysLabourRequired(LabourRequirement requirement) { double daysNeeded = 0; // get fixed days per LabourRequirement if (labourRequired != null) { daysNeeded = labourRequired.LabourPerUnit; } return(daysNeeded); }
/// <summary> /// Determine the labour required for this activity based on LabourRequired items in tree /// </summary> /// <param name="requirement">Labour requirement model</param> /// <returns></returns> public override double GetDaysLabourRequired(LabourRequirement requirement) { // get all days required as fixed only option from requirement switch (requirement.UnitType) { case LabourUnitType.Fixed: return(requirement.LabourPerUnit); default: throw new Exception(String.Format("LabourUnitType {0} is not supported for {1} in {2}", requirement.UnitType, requirement.Name, this.Name)); } }
/// <summary> /// Determines how much labour is required from this activity based on the requirement provided /// </summary> /// <param name="requirement">The details of how labour are to be provided</param> /// <returns></returns> public override GetDaysLabourRequiredReturnArgs GetDaysLabourRequired(LabourRequirement requirement) { List <Ruminant> herd = CurrentHerd(false); filterGroupsCount = FindAllChildren <RuminantGroup>().Count(); if (filterGroupsCount > 0) { numberToTag = 0; foreach (RuminantGroup item in FindAllChildren <RuminantGroup>()) { if (ApplicationStyle == TagApplicationStyle.Add) { numberToTag += herd.Filter(item).Where(a => !a.TagExists(TagLabel)).Count(); } else { numberToTag += herd.Filter(item).Where(a => a.TagExists(TagLabel)).Count(); } } } else { numberToTag = herd.Count(); } double adultEquivalents = herd.Sum(a => a.AdultEquivalent); double daysNeeded = 0; double numberUnits = 0; labourRequirement = requirement; switch (requirement.UnitType) { case LabourUnitType.Fixed: daysNeeded = requirement.LabourPerUnit; break; case LabourUnitType.perHead: numberUnits = numberToTag / requirement.UnitSize; if (requirement.WholeUnitBlocks) { numberUnits = Math.Ceiling(numberUnits); } daysNeeded = numberUnits * requirement.LabourPerUnit; break; default: throw new Exception(String.Format("LabourUnitType {0} is not supported for {1} in {2}", requirement.UnitType, requirement.Name, this.Name)); } return(new GetDaysLabourRequiredReturnArgs(daysNeeded, "Mark", this.PredictedHerdName)); }
/// <inheritdoc/> public override GetDaysLabourRequiredReturnArgs GetDaysLabourRequired(LabourRequirement requirement) { double daysNeeded; switch (requirement.UnitType) { case LabourUnitType.Fixed: daysNeeded = requirement.LabourPerUnit; break; default: throw new Exception(String.Format("LabourUnitType {0} is not supported for {1} in {2}", requirement.UnitType, requirement.Name, this.Name)); } return(new GetDaysLabourRequiredReturnArgs(daysNeeded, "External", null)); }
/// <inheritdoc/> public override GetDaysLabourRequiredReturnArgs GetDaysLabourRequired(LabourRequirement requirement) { double daysNeeded; switch (requirement.UnitType) { case LabourUnitType.Fixed: daysNeeded = requirement.LabourPerUnit; break; case LabourUnitType.perUnit: daysNeeded = units * requirement.LabourPerUnit; break; default: throw new Exception(String.Format("LabourUnitType {0} is not supported for {1} in {2}", requirement.UnitType, requirement.Name, this.Name)); } return new GetDaysLabourRequiredReturnArgs(daysNeeded, TransactionCategory, (resourceToBuy as CLEMModel).NameWithParent); }
/// <summary> /// Determines how much labour is required from this activity based on the requirement provided /// </summary> /// <param name="requirement">The details of how labour are to be provided</param> /// <returns></returns> public override double GetDaysLabourRequired(LabourRequirement requirement) { double daysNeeded = 0; switch (requirement.UnitType) { case LabourUnitType.Fixed: daysNeeded = requirement.LabourPerUnit; break; case LabourUnitType.perUnit: daysNeeded = unitsAvailable * requirement.LabourPerUnit; break; default: throw new Exception(String.Format("LabourUnitType {0} is not supported for {1} in {2}", requirement.UnitType, requirement.Name, this.Name)); } return daysNeeded; }
/// <inheritdoc/> public override GetDaysLabourRequiredReturnArgs GetDaysLabourRequired(LabourRequirement requirement) { var group = people?.Items.Where(a => a.Hired != true); decimal head = 0; double adultEquivalents = 0; foreach (var child in FindAllChildren <LabourFeedGroup>()) { var subgroup = child.Filter(group); head += subgroup.Sum(a => a.Individuals); adultEquivalents += subgroup.Sum(a => a.TotalAdultEquivalents); } double daysNeeded = 0; double numberUnits = 0; switch (requirement.UnitType) { case LabourUnitType.Fixed: daysNeeded = requirement.LabourPerUnit; break; case LabourUnitType.perHead: numberUnits = Convert.ToDouble(head, System.Globalization.CultureInfo.InvariantCulture) / requirement.UnitSize; if (requirement.WholeUnitBlocks) { numberUnits = Math.Ceiling(numberUnits); } daysNeeded = numberUnits * requirement.LabourPerUnit; break; case LabourUnitType.perAE: numberUnits = adultEquivalents / requirement.UnitSize; if (requirement.WholeUnitBlocks) { numberUnits = Math.Ceiling(numberUnits); } daysNeeded = numberUnits * requirement.LabourPerUnit; break; default: throw new Exception(String.Format("LabourUnitType {0} is not supported for {1} in {2}", requirement.UnitType, requirement.Name, this.Name)); } return(new GetDaysLabourRequiredReturnArgs(daysNeeded, "Feeding", null)); }
/// <summary> /// Determines how much labour is required from this activity based on the requirement provided /// </summary> /// <param name="requirement">The details of how labour are to be provided</param> /// <returns></returns> public override GetDaysLabourRequiredReturnArgs GetDaysLabourRequired(LabourRequirement requirement) { List <LabourType> group = Resources.Labour().Items.Where(a => a.Hired != true).ToList(); int head = 0; double adultEquivalents = 0; foreach (Model child in this.FindAllChildren <LabourFeedGroup>()) { var subgroup = group.Filter(child).ToList(); head += subgroup.Count(); adultEquivalents += subgroup.Sum(a => a.AdultEquivalent); } double daysNeeded = 0; double numberUnits = 0; switch (requirement.UnitType) { case LabourUnitType.Fixed: daysNeeded = requirement.LabourPerUnit; break; case LabourUnitType.perHead: numberUnits = head / requirement.UnitSize; if (requirement.WholeUnitBlocks) { numberUnits = Math.Ceiling(numberUnits); } daysNeeded = numberUnits * requirement.LabourPerUnit; break; case LabourUnitType.perAE: numberUnits = adultEquivalents / requirement.UnitSize; if (requirement.WholeUnitBlocks) { numberUnits = Math.Ceiling(numberUnits); } daysNeeded = numberUnits * requirement.LabourPerUnit; break; default: throw new Exception(String.Format("LabourUnitType {0} is not supported for {1} in {2}", requirement.UnitType, requirement.Name, this.Name)); } return(new GetDaysLabourRequiredReturnArgs(daysNeeded, "Feeding", null)); }
public RuminantActivityGrazeAll(Node parent) : base(parent) { Name = "GrazeAll"; OnPartialResourcesAvailableAction = 2; var labour = new LabourRequirement(this); var group = new LabourFilterGroup(labour); var filter = new LabourFilter(group) { Parameter = 0, Operator = 0, Value = "Male" }; group.Add(filter); labour.Add(group); }
/// <summary> /// Determine the labour required for this activity based on LabourRequired items in tree /// </summary> /// <param name="requirement">Labour requirement model</param> /// <returns></returns> public override GetDaysLabourRequiredReturnArgs GetDaysLabourRequired(LabourRequirement requirement) { IEnumerable <Ruminant> herd = CurrentHerd(false); double daysNeeded = 0; var returnArgs = new GetDaysLabourRequiredReturnArgs(daysNeeded, TransactionCategory, this.PredictedHerdName); if (requirement.UnitType == LabourUnitType.Fixed) { returnArgs.DaysNeeded = requirement.LabourPerUnit; } else { foreach (RuminantGroup item in filterGroups) { int head = item.Filter(GetIndividuals <Ruminant>(GetRuminantHerdSelectionStyle.NotMarkedForSale).Where(a => a.Weaned == false)).Count(); switch (requirement.UnitType) { case LabourUnitType.Fixed: break; case LabourUnitType.perHead: daysNeeded += head * requirement.LabourPerUnit; break; case LabourUnitType.perUnit: double numberUnits = head / requirement.UnitSize; if (requirement.WholeUnitBlocks) { numberUnits += Math.Ceiling(numberUnits); } daysNeeded = numberUnits * requirement.LabourPerUnit; break; default: throw new Exception(String.Format("LabourUnitType {0} is not supported for {1} in {2}", requirement.UnitType, requirement.Name, this.Name)); } } } return(returnArgs); }
/// <summary> /// Determine the labour required for this activity based on LabourRequired items in tree /// </summary> /// <param name="requirement">Labour requirement model</param> /// <returns></returns> public override double GetDaysLabourRequired(LabourRequirement requirement) { // get all potential dry breeders List <RuminantFemale> herd = this.CurrentHerd(false).Where(a => a.Gender == Sex.Female).Cast <RuminantFemale>().Where(a => a.Age - a.AgeAtLastBirth >= MonthsSinceBirth && a.PreviousConceptionRate >= MinimumConceptionBeforeSell && a.AgeAtLastBirth > 0).ToList(); int head = herd.Count(); double adultEquivalent = herd.Sum(a => a.AdultEquivalent); double daysNeeded = 0; double numberUnits = 0; switch (requirement.UnitType) { case LabourUnitType.Fixed: daysNeeded = requirement.LabourPerUnit; break; case LabourUnitType.perHead: numberUnits = head / requirement.UnitSize; if (requirement.WholeUnitBlocks) { numberUnits = Math.Ceiling(numberUnits); } daysNeeded = numberUnits * requirement.LabourPerUnit; break; case LabourUnitType.perAE: numberUnits = adultEquivalent / requirement.UnitSize; if (requirement.WholeUnitBlocks) { numberUnits = Math.Ceiling(numberUnits); } daysNeeded = numberUnits * requirement.LabourPerUnit; break; default: throw new Exception(String.Format("LabourUnitType {0} is not supported for {1} in {2}", requirement.UnitType, requirement.Name, this.Name)); } return(daysNeeded); }
/// <summary> /// Determine the labour required for this activity based on LabourRequired items in tree /// </summary> /// <param name="requirement">Labour requirement model</param> /// <returns></returns> public override double GetDaysLabourRequired(LabourRequirement requirement) { // get all potential dry breeders List <Ruminant> herd = this.CurrentHerd(false); int head = herd.Count(); double animalEquivalents = herd.Sum(a => a.AdultEquivalent); double daysNeeded = 0; double numberUnits = 0; switch (requirement.UnitType) { case LabourUnitType.Fixed: daysNeeded = requirement.LabourPerUnit; break; case LabourUnitType.perHead: numberUnits = head / requirement.UnitSize; if (requirement.WholeUnitBlocks) { numberUnits = Math.Ceiling(numberUnits); } daysNeeded = numberUnits * requirement.LabourPerUnit; break; case LabourUnitType.perAE: numberUnits = animalEquivalents / requirement.UnitSize; if (requirement.WholeUnitBlocks) { numberUnits = Math.Ceiling(numberUnits); } daysNeeded = numberUnits * requirement.LabourPerUnit; break; default: throw new Exception(String.Format("LabourUnitType {0} is not supported for {1} in {2}", requirement.UnitType, requirement.Name, this.Name)); } return(daysNeeded); }
/// <summary> /// Determine the labour required for this activity based on LabourRequired items in tree /// </summary> /// <param name="requirement">Labour requirement model</param> /// <returns></returns> public override GetDaysLabourRequiredReturnArgs GetDaysLabourRequired(LabourRequirement requirement) { List <Ruminant> herd = this.CurrentHerd(false).Where(a => a.Location != "").ToList(); int head = herd.Count(); double adultEquivalents = herd.Sum(a => a.AdultEquivalent); double daysNeeded = 0; double numberUnits = 0; switch (requirement.UnitType) { case LabourUnitType.Fixed: daysNeeded = requirement.LabourPerUnit; break; case LabourUnitType.perHead: numberUnits = head / requirement.UnitSize; if (requirement.WholeUnitBlocks) { numberUnits = Math.Ceiling(numberUnits); } daysNeeded = numberUnits * requirement.LabourPerUnit; break; case LabourUnitType.perAE: numberUnits = adultEquivalents / requirement.UnitSize; if (requirement.WholeUnitBlocks) { numberUnits = Math.Ceiling(numberUnits); } daysNeeded = numberUnits * requirement.LabourPerUnit; break; default: throw new Exception(String.Format("LabourUnitType {0} is not supported for {1} in {2}", requirement.UnitType, requirement.Name, this.Name)); } return(new GetDaysLabourRequiredReturnArgs(daysNeeded, "Graze", this.PredictedHerdName)); }
/// <summary> /// Determine the labour required for this activity based on LabourRequired items in tree /// </summary> /// <param name="requirement">Labour requirement model</param> /// <returns></returns> public override double GetDaysLabourRequired(LabourRequirement requirement) { List <Ruminant> herd = Resources.RuminantHerd().Herd.Where(a => (a.SaleFlag.ToString().Contains("Purchase") || a.SaleFlag.ToString().Contains("Sale")) && a.Breed == this.PredictedHerdBreed).ToList(); int head = herd.Count(); double animalEquivalents = herd.Sum(a => a.AdultEquivalent); double daysNeeded = 0; double numberUnits = 0; switch (requirement.UnitType) { case LabourUnitType.Fixed: daysNeeded = requirement.LabourPerUnit; break; case LabourUnitType.perHead: numberUnits = head / requirement.UnitSize; if (requirement.WholeUnitBlocks) { numberUnits = Math.Ceiling(numberUnits); } daysNeeded = numberUnits * requirement.LabourPerUnit; break; case LabourUnitType.perAE: numberUnits = animalEquivalents / requirement.UnitSize; if (requirement.WholeUnitBlocks) { numberUnits = Math.Ceiling(numberUnits); } daysNeeded = numberUnits * requirement.LabourPerUnit; break; default: throw new Exception(String.Format("LabourUnitType {0} is not supported for {1} in {2}", requirement.UnitType, requirement.Name, this.Name)); } return(daysNeeded); }
/// <summary> /// Determines how much labour is required from this activity based on the requirement provided /// </summary> /// <param name="requirement">The details of how labour are to be provided</param> /// <returns></returns> public override double GetDaysLabourRequired(LabourRequirement requirement) { throw new NotImplementedException(); }