/// <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));
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        /// <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);
        }
Пример #5
0
        /// <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));
        }
Пример #7
0
        /// <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));
        }
Пример #9
0
        /// <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"));
        }
Пример #10
0
        /// <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));
        }
Пример #11
0
        /// <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);
        }
Пример #12
0
        /// <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);
        }
Пример #13
0
        /// <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));
        }
Пример #14
0
        /// <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));
        }
Пример #15
0
        /// <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));
        }
Пример #16
0
        /// <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);
        }
Пример #17
0
        /// <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));
            }
        }
Пример #18
0
        /// <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));
        }
Пример #20
0
 /// <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);
 }
Пример #21
0
 /// <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;
 }
Пример #22
0
        /// <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));
        }
Пример #23
0
        /// <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));
        }
Пример #24
0
        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);
        }
Пример #25
0
        /// <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);
        }
Пример #26
0
        /// <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);
        }
Пример #27
0
        /// <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);
        }
Пример #28
0
        /// <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));
        }
Пример #29
0
        /// <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();
 }