/// <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> /// Method to determine resources required for this activity in the current month /// </summary> /// <returns>List of required resource requests</returns> private List <ResourceRequest> GetResourcesNeededForActivityLocal() { ResourceRequestList = null; 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)); } } // determine labour required if (amountAvailable > 0) { // for each labour item specified foreach (var item in labour) { double daysNeeded = 0; switch (item.UnitType) { case LabourUnitType.perKg: daysNeeded = item.LabourPerUnit * amountAvailable; break; default: throw new Exception(String.Format("LabourUnitType {0} is not supported for {1} in {2}", item.UnitType, item.Name, this.Name)); } if (daysNeeded > 0) { if (ResourceRequestList == null) { ResourceRequestList = new List <ResourceRequest>(); } ResourceRequestList.Add(new ResourceRequest() { AllowTransmutation = false, Required = daysNeeded, ResourceType = typeof(Labour), ResourceTypeName = "", ActivityModel = this, Reason = "Manure collection", FilterDetails = new List <object>() { item } } ); } } } return(ResourceRequestList); }