public bool?IsKynHafPrefilled(long eventId, long customerId, DateTime appointmentTime, bool checkKynOnly = true) { var model = _healthAssessmentService.GetHealthAssessmentEditModel(customerId, eventId); if (model == null || !model.QuestionEditModels.Any()) { return(false); } if (!model.IsKynPurchased && checkKynOnly) { return(null); } var customer = _customerRepository.GetCustomer(customerId); var isFilled = checkKynOnly ? CheckKynHaf(customer, model) : CheckHafPrefilled(customer, eventId); if (isFilled) { var answers = _healthAssessmentRepository.Get(customerId, eventId); if (answers.Any()) { var answer = answers.First(); if (answer.DataRecorderMetaData == null || answer.DataRecorderMetaData.DataRecorderCreator == null) { return(false); } var technicianIds = _organizationRoleUserRepository.GetOrganizationRoleUserIdsForRole((long)Roles.Technician); technicianIds.AddRange(_organizationRoleUserRepository.GetOrganizationRoleUserIdsByParentRole((long)Roles.Technician)); var dataRecorderMetaData = answer.DataRecorderMetaData; var updatedByCustomerOrOtherThanTechnician = dataRecorderMetaData.DataRecorderCreator.Id == customerId || !technicianIds.Contains(dataRecorderMetaData.DataRecorderCreator.Id); if (updatedByCustomerOrOtherThanTechnician) { return(dataRecorderMetaData.DateCreated.AddHours(2) <= appointmentTime); } var latestVersion = _healthAssessmentRepository.GetLastVersionNumberUpdatedByCustomerOrOtherThanTechnician(answer.EventCustomerId, customerId); if (latestVersion > 0) { var archiveAnswers = _healthAssessmentRepository.GetArchive(customerId, eventId, latestVersion); model = _healthAssessmentService.GetHealthAssessmentEditModel(customerId, eventId, latestVersion); isFilled = checkKynOnly ? CheckKynHaf(customer, model) : CheckHafPrefilled(customer, eventId, latestVersion); if (isFilled) { if (archiveAnswers != null && archiveAnswers.Any()) { answer = archiveAnswers.First().HealthAssessmentAnswer; dataRecorderMetaData = answer.DataRecorderMetaData; return(dataRecorderMetaData.DateCreated.AddHours(2) <= appointmentTime); } } } } } return(false); }