/// <summary> /// Constructor /// </summary> /// <param name="status">Change status</param> /// <param name="female">Individual being reported</param> /// <param name="dateTime">Current clock</param> public ConceptionStatusChangedEventArgs(ConceptionStatus status, RuminantFemale female, DateTime dateTime) { Status = status; Female = female; // Calculate conception date switch (Status) { case ConceptionStatus.Conceived: case ConceptionStatus.Failed: case ConceptionStatus.Birth: case ConceptionStatus.Weaned: ConceptionDate = dateTime.AddMonths(-1 * Convert.ToInt32(female.Age - female.AgeAtLastConception, CultureInfo.InvariantCulture)); ConceptionDate = new DateTime(ConceptionDate.Year, ConceptionDate.Month, DateTime.DaysInMonth(ConceptionDate.Year, ConceptionDate.Month)); break; case ConceptionStatus.Unsuccessful: case ConceptionStatus.NotMated: case ConceptionStatus.NotReady: ConceptionDate = dateTime; break; default: break; } }
/// <summary> /// Constructor /// </summary> /// <param name="status">Change status</param> /// <param name="female">Individual being reported</param> /// <param name="dateTime">Current clock</param> /// <param name="offspring">The offspring related to</param> public ConceptionStatusChangedEventArgs(ConceptionStatus status, RuminantFemale female, DateTime dateTime, Ruminant offspring = null) { Status = status; Female = female; // Calculate conception date switch (Status) { case ConceptionStatus.Conceived: case ConceptionStatus.Failed: case ConceptionStatus.Birth: ConceptionDate = dateTime.AddMonths(-1 * Convert.ToInt32(female.Age - female.AgeAtLastConception, CultureInfo.InvariantCulture)); ConceptionDate = new DateTime(ConceptionDate.Year, ConceptionDate.Month, DateTime.DaysInMonth(ConceptionDate.Year, ConceptionDate.Month)); break; case ConceptionStatus.Weaned: if (offspring is null) { throw new ArgumentException("Code logice error: An offspring must be supplied in ConceptionStatusChangedEventArgs when status is Weaned"); } ConceptionDate = dateTime.AddMonths(-1 * Convert.ToInt32(offspring.Age + female.BreedParams.GestationLength, CultureInfo.InvariantCulture)); ConceptionDate = new DateTime(ConceptionDate.Year, ConceptionDate.Month, DateTime.DaysInMonth(ConceptionDate.Year, ConceptionDate.Month)); break; case ConceptionStatus.Unsuccessful: case ConceptionStatus.NotMated: case ConceptionStatus.NotReady: ConceptionDate = dateTime; break; default: break; } }