public virtual bool Add(MeritBadge badge, bool forceElective = false)
        {
            int count = MeritBadges.Count;

            if (count < Total)
            {
                int req = MeritBadges.Count(mb => mb.EagleRequired);
                if (req > Required)
                {
                    req = Required;
                }
                int ele = count - req;

                if ((badge.EagleRequired && (req < Required || forceElective)) ||
                    (!badge.EagleRequired && ele < Elective)
                    )
                {
                    MeritBadges.Add(badge);
                    return(true);
                }
            }
            return(false);
        }
 public override bool Add(MeritBadge badge, bool forceElective = false)
 {
     if (badge.EagleRequired)
     {
         // (a) First Aid
         // (b) Citizenship in the Community
         // (c) Citizenship in the Nation
         // (d) Citizenship in the World
         // (e) Communication
         // (f) Cooking
         // (g) Personal Fitness
         // (h) Emergency Preparedness or Lifesaving
         if ((badge.Name == "Emergency Preparedness" && MeritBadges.Any(mb => mb.Name == "Lifesaving")) ||
             (badge.Name == "Lifesaving" && MeritBadges.Any(mb => mb.Name == "Emergency Preparedness")))
         {
             return(false);
         }
         // (i) Environmental Science or Sustainability
         if ((badge.Name == "Environmental Science" && MeritBadges.Any(mb => mb.Name == "Sustainability")) ||
             (badge.Name == "Sustainability" && MeritBadges.Any(mb => mb.Name == "Environmental Science")))
         {
             return(false);
         }
         // (j) Personal Management
         // (k) Swimming or Hiking or Cycling
         if ((badge.Name == "Swimming" && MeritBadges.Any(mb => mb.Name == "Hiking" || mb.Name == "Cycling")) ||
             (badge.Name == "Hiking" && MeritBadges.Any(mb => mb.Name == "Swimming" || mb.Name == "Cycling")) ||
             (badge.Name == "Cycling" && MeritBadges.Any(mb => mb.Name == "Swimming" || mb.Name == "Hiking")))
         {
             return(false);
         }
         // (l) Camping
         // (m) Family Life
     }
     return(base.Add(badge, false));
 }