public void TestVaccineMissing() { var testP = new Participant { TrialArm = RandomisationArm.RussianBCG, VaccinesAdministered = new VaccineAdministered[] { new VaccineAdministered { VaccineId = 1 } } }; DateTime twentyEightPrior = DateTime.Now.AddDays(-28); var a = new Func <IParticipant, DataRequiredOption> (p => ((p.OutcomeAt28Days >= OutcomeAt28DaysOption.DischargedBefore28Days && !p.DischargeDateTime.HasValue) || (DeathOrLastContactRequiredIf.Contains(p.OutcomeAt28Days) && (p.DeathOrLastContactDateTime == null || (KnownDeadOutcomes.Contains(p.OutcomeAt28Days) && p.CauseOfDeath == CauseOfDeathOption.Missing)))) ? DataRequiredOption.DetailsMissing : (p.TrialArm != RandomisationArm.Control && !p.ProtocolViolations.Any(pv => pv.ViolationType == ViolationTypeOption.MajorWrongTreatment) && !p.VaccinesAdministered.Any(v => v.VaccineGiven.IsBcg)) ? DataRequiredOption.BcgDataRequired : (p.OutcomeAt28Days == OutcomeAt28DaysOption.Missing) ? DbFunctions.DiffDays(p.DateTimeBirth, DateTime.Now) < 28 ? DataRequiredOption.AwaitingOutcomeOr28 : DataRequiredOption.OutcomeRequired : KnownDeadOutcomes.Contains(p.OutcomeAt28Days) ? p.MaternalBCGScar == MaternalBCGScarStatus.Missing ? DataRequiredOption.MaternalBCGScarDetails : DataRequiredOption.Complete : DbFunctions.DiffDays(p.VaccinesAdministered.Any( v => v.VaccineGiven.IsBcg) ? p.VaccinesAdministered.First(v => v.VaccineGiven.IsBcg).AdministeredAt : p.DischargeDateTime ?? p.DeathOrLastContactDateTime ?? p.RegisteredAt, DateTime.Now) < 42 ? DataRequiredOption.Awaiting6WeeksToElapse : p.FollowUpBabyBCGReaction == FollowUpBabyBCGReactionStatus.Missing ? p.PermanentlyUncontactable ? DataRequiredOption.Complete : p.UnsuccessfulFollowUps.Any() ? p.UnsuccessfulFollowUps.Count > BlowTrial.Models.ParticipantBaseModel.MaxFollowUpAttempts ? DataRequiredOption.Complete : DataRequiredOption.FailedInitialContact : DataRequiredOption.AwaitingInfantScarDetails : DataRequiredOption.Complete); /* * var a = new Func<IParticipant, DataRequiredOption>(p => ((p.OutcomeAt28Days >= OutcomeAt28DaysOption.DischargedBefore28Days && !p.DischargeDateTime.HasValue) || (DeathOrLastContactRequiredIf.Contains(p.OutcomeAt28Days) && (p.DeathOrLastContactDateTime == null || (KnownDeadOutcomes.Contains(p.OutcomeAt28Days) && p.CauseOfDeath == CauseOfDeathOption.Missing)))) || ? DataRequiredOption.DetailsMissing || : (p.TrialArm != RandomisationArm.Control && !p.VaccinesAdministered.Any(v => DataContextInitialiser.BcgVaccineIds.Contains(v.VaccineId))) || ? DataRequiredOption.BcgDataRequired || : (p.OutcomeAt28Days == OutcomeAt28DaysOption.Missing) || ? (p.DateTimeBirth > twentyEightPrior) //DbFunctions.DiffDays(p.DateTimeBirth, now) < 28 || ? DataRequiredOption.AwaitingOutcomeOr28 || : DataRequiredOption.OutcomeRequired || : DataRequiredOption.Complete); */ Assert.AreNotEqual(DataRequiredOption.BcgDataRequired, a(testP)); }
static ParticipantBaseModel() { DataRequiredExpression = p => ((p.OutcomeAt28Days >= OutcomeAt28DaysOption.DischargedBefore28Days && !p.DischargeDateTime.HasValue) || (DeathOrLastContactRequiredIf.Contains(p.OutcomeAt28Days) && (p.DeathOrLastContactDateTime == null || (KnownDeadOutcomes.Contains(p.OutcomeAt28Days) && p.CauseOfDeath == CauseOfDeathOption.Missing)))) ? DataRequiredOption.DetailsMissing : (p.TrialArm != RandomisationArm.Control && !p.ProtocolViolations.Any(pv => pv.ViolationType == ViolationTypeOption.MajorWrongTreatment) && !p.VaccinesAdministered.Any(v => v.VaccineGiven.IsBcg)) ? DataRequiredOption.BcgDataRequired : (p.OutcomeAt28Days == OutcomeAt28DaysOption.Missing) ? (DbFunctions.DiffDays(p.DateTimeBirth, DateTime.Now) < 28) ? DataRequiredOption.AwaitingOutcomeOr28 : DataRequiredOption.OutcomeRequired : KnownDeadOutcomes.Contains(p.OutcomeAt28Days) ?(p.MaternalBCGScar == MaternalBCGScarStatus.Missing) ?DataRequiredOption.MaternalBCGScarDetails :DataRequiredOption.Complete : (DbFunctions.DiffDays(p.VaccinesAdministered.Any(v => v.VaccineGiven.IsBcg) ?p.VaccinesAdministered.FirstOrDefault(v => v.VaccineGiven.IsBcg).AdministeredAt : (p.DischargeDateTime ?? p.DeathOrLastContactDateTime ?? p.RegisteredAt), DateTime.Now) < ParticipantBaseModel.FollowToAge) ?DataRequiredOption.Awaiting6WeeksToElapse :(p.FollowUpBabyBCGReaction == FollowUpBabyBCGReactionStatus.Missing) ?p.PermanentlyUncontactable ?DataRequiredOption.Complete :p.UnsuccessfulFollowUps.Any() ? (p.UnsuccessfulFollowUps.Count > MaxFollowUpAttempts) ?DataRequiredOption.Complete :DataRequiredOption.FailedInitialContact : DataRequiredOption.AwaitingInfantScarDetails : DataRequiredOption.Complete; var visitor = new ReplaceMethodCallVisitor( typeof(DbFunctions).GetMethod("DiffDays", BindingFlags.Static | BindingFlags.Public, null, new Type[] { typeof(DateTime?), typeof(DateTime?) }, null), args => Expression.Property(Expression.Subtract(args[1], args[0]), "Days")); DataRequiredFunc = ((Expression <Func <IParticipant, DataRequiredOption> >)visitor.Visit(DataRequiredExpression)).Compile(); }