示例#1
0
        public OfferResponseReason? Evaluate(IHub services, Company company, Person person, decimal amount)
        {
            var personService = services.Resolve<IPersonService>();

            var expectedCompensation = personService.CalculateCompensationValue(person);

            if(amount >= expectedCompensation)
            {
                return null;
            }

            return OfferResponseReason.OfferValue;
        }
示例#2
0
        public OfferResponseReason? Evaluate(IHub services, Company company, Person person, decimal amount)
        {
            var perkService = services.Resolve<IPerkService>();

            var applicablePerkCount = company.Perks.Count(cp => cp.Count > 0 && perkService.DoesPerkApplyTo(cp.Perk, person));

            var personService = services.Resolve<IPersonService>();

            var minimumPerkCount = person.GetPersonalityValue(PersonalityAttributeId.MinimumPerkCount);

            if(minimumPerkCount <= applicablePerkCount)
            {
                return null;
            }

            return OfferResponseReason.Perks;
        }
示例#3
0
        public PersonDto(Person person)
        {
            Id = person.Id;

            Birthday = person.Birthday;

            FirstName = person.FirstName;

            Gender = person.Gender;

            LastName = person.LastName;

            PersonalityId = person.Personality.Id;

            RetirementDate = person.RetirementDate;

            Skills = person.Skills.Select(s => new SkillDto(s));

            WorkHistory = person.WorkHistory.Select(wh => new WorkHistoryDto(wh));
        }
        public OfferResponseReason? Evaluate(IHub services, Company company, Person person, decimal amount)
        {
            var workload = 0m;

            if (company.Employees.Any())
            {
                workload = (decimal)company.Projects.Count / (decimal)company.Employees.Count;
            }

            var personService = services.Resolve<IPersonService>();

            var minWorkload = person.GetPersonalityValue(PersonalityAttributeId.MinimumDesiredEmployeeWorkload);

            var maxWorkload = person.GetPersonalityValue(PersonalityAttributeId.MaximumDesiredEmployeeWorkload);

            if (workload >= minWorkload &&
                workload <= maxWorkload)
            {
                return null;
            }

            return OfferResponseReason.EmployeeWorkload;
        }
        public OfferResponseReason? Evaluate(IHub services, Company company, Person person, decimal amount)
        {
            var configurationService = services.Resolve<IConfigurationService>();

            var fastCompanyGrowth = configurationService.GetIntValue(ConfigurationKey.FastCompanyGrowthValue, ConfigurationFallbackValue.FastCompanyGrowthValue);

            var weight = Math.Min((decimal)company.Prospects.Count / (decimal)fastCompanyGrowth, 1m);

            var desiredGrowth = person.GetPersonalityValue(PersonalityAttributeId.DesiredCompanyGrowth);

            var importance = person.GetPersonalityValue(PersonalityAttributeId.CompanyGrowthImportance);

            var differential = Math.Abs(desiredGrowth - weight) * importance;

            var maxDifferential = configurationService.GetDecimalValue(ConfigurationKey.CompanyGrowthMaxDifferential, ConfigurationFallbackValue.CompanyGrowthMaxDifferential);

            if (differential <= maxDifferential)
            {
                return null;
            }

            return OfferResponseReason.CompanyGrowth;
        }
        public OfferResponseReason? Evaluate(IHub services, Company company, Person person, decimal amount)
        {
            var configurationService = services.Resolve<IConfigurationService>();

            var largeCompanySize = configurationService.GetIntValue(ConfigurationKey.LargeCompanySize, ConfigurationFallbackValue.LargeCompanySize);

            var weight = Math.Min((decimal)company.Employees.Count / (decimal)largeCompanySize, 1m);

            var desiredSize = person.GetPersonalityValue(PersonalityAttributeId.DesiredCompanySize);

            var importance = person.GetPersonalityValue(PersonalityAttributeId.CompanySizeImportance);

            var differential = Math.Abs(desiredSize - weight) * importance;

            var maxDifferential = configurationService.GetDecimalValue(ConfigurationKey.CompanySizeMaxDifferential, ConfigurationFallbackValue.CompanySizeMaxDifferential);

            if (differential <= maxDifferential)
            {
                return null;
            }

            return OfferResponseReason.CompanySize;
        }
        public OfferResponseReason? Evaluate(IHub services, Company company, Person person, decimal amount)
        {
            // Create a flag table of the optional skills this person has
            var skills = person.Skills.Where(s => !s.SkillDefinition.IsMandatory)
                                      .ToDictionary(s => s.SkillDefinition, s => false);

            foreach(var project in company.Projects)
            {
                foreach(var requirement in project.Requirements)
                {
                    if(skills.ContainsKey(requirement.SkillDefinition))
                    {
                        skills[requirement.SkillDefinition] = true;
                    }
                }
            }

            var relevance = 1m;

            if (skills.Count > 0)
            {
                relevance = (decimal)skills.Count(s => s.Value) / (decimal)skills.Count;
            }

            var minRelevance = person.GetPersonalityValue(PersonalityAttributeId.MinimumDesiredRelevance);

            var maxRelevance = person.GetPersonalityValue(PersonalityAttributeId.MaximumDesiredRelevance);

            if(minRelevance <= relevance &&
               relevance <= maxRelevance)
            {
                return null;
            }

            return OfferResponseReason.Relevance;
        }
示例#8
0
 public bool IsUnemployed(Person person)
 {
     throw new NotImplementedException();
 }
示例#9
0
 public bool IsRetired(Person person)
 {
     return false;
 }
示例#10
0
 public decimal GetPersonalityValue(Person person, PersonalityAttributeId attribute)
 {
     throw new NotImplementedException();
 }
示例#11
0
 public OfferResponse EvaluateOffer(Company company, Person person, decimal amount)
 {
     return new OfferResponse(new List<OfferResponseReason>(), 0);
 }
示例#12
0
 public decimal CalculateCompensationValue(Person person)
 {
     return 100000.0m;
 }
示例#13
0
 public void RecruitPerson(Company company, Person person)
 {
     throw new NotImplementedException();
 }
示例#14
0
 public OfferResponse MakeOffer(Company company, Person person, decimal value)
 {
     throw new NotImplementedException();
 }
示例#15
0
        public static Prospect CreateRandomProspect(Person person)
        {
            var prospectSkills = new List<ProspectSkill>();

            foreach (var skill in person.Skills)
            {
                var prospectSkill = new ProspectSkill
                {
                    SkillDefinition = skill.SkillDefinition
                };

                prospectSkill.Value.Minimum = 0;

                prospectSkill.Value.Maximum = 100000;

                prospectSkills.Add(prospectSkill);
            }

            var output = new Prospect(prospectSkills)
            {
                Person = person,
                Accuracy = 0,
                Salary = new Range<decimal>(0, 100000)
            };

            return output;
        }
示例#16
0
        public static PersonServiceData GeneratePersonServiceData(int numberOfPeople, IEnumerable<Personality> validPersonalities, IEnumerable<SkillDefinition> validSkills = null, IEnumerable<Company> validCompanies = null)
        {
            var people = new List<Person>();

            for (var personIndex = 0; personIndex < numberOfPeople; personIndex++)
            {
                List<Skill> skills = null;

                if (validSkills != null)
                {
                    var remainingSkills = new List<SkillDefinition>(validSkills);

                    var skillCount = Utilities.GetRandomInt(1, remainingSkills.Count);

                    skills = new List<Skill>(skillCount);

                    for (var skillIndex = 0; skillIndex < skillCount; skillIndex++)
                    {
                        var skill = new Skill
                        {
                            ForgetRate = Utilities.GetRandomDecimal(0, 1),
                            LearnRate = Utilities.GetRandomDecimal(0, 1),
                            Value = Utilities.GetRandomDecimal(0, 255),
                            SkillDefinition = remainingSkills.Random()
                        };

                        remainingSkills.Remove(skill.SkillDefinition);

                        skills.Add(skill);
                    }
                }
                else
                {
                    skills = new List<Skill>();
                }

                var person = new Person(skills)
                {
                    Id = Utilities.InvalidId,
                    FirstName = Utilities.GetRandomString(16),
                    LastName = Utilities.GetRandomString(16),
                    Birthday = Utilities.GetRandomDate().Date,
                    Gender = Utilities.GetRandomValue(Gender.None),
                    Personality = validPersonalities.Random()
                };

                person.RetirementDate = person.Birthday.AddYears(Utilities.GetRandomInt(60, 100)).AddDays(Utilities.GetRandomInt(1, 360));

                if (validCompanies != null)
                {
                    var remainingCompanies = new List<Company>(validCompanies);

                    var rollingDate = new DateTime(Utilities.GetRandomInt(person.Birthday.Year + 10, person.Birthday.Year + 20), Utilities.GetRandomInt(1, 12), Utilities.GetRandomInt(1, 28));

                    while (remainingCompanies.Any())
                    {
                        var workHistory = new WorkHistory
                        {
                            Company = remainingCompanies.Random(),
                            StartDate = rollingDate,
                            EndDate = rollingDate = rollingDate.AddMonths(Utilities.GetRandomInt(1, 6)),
                            StartingSalary = Utilities.GetRandomDecimal(10, 100),
                            EndingSalary = Utilities.GetRandomDecimal(100, 250)
                        };

                        remainingCompanies.Remove(workHistory.Company);

                        person.WorkHistory.Add(workHistory);
                    }
                }

                people.Add(person);
            }

            return new PersonServiceData
            {
                People = people
            };
        }