public bool CreateExperimentData(DataEntryViewModel dataEntryViewModel) { //Get list of DataEntryFieldViewModels(Properties) from view model var propertyViewModels = dataEntryViewModel.Properties.ToList(); //Remove properties that contain no DataEntryDetails, they have nothing to add to database propertyViewModels.RemoveAll(p => p.DataEntryDetails == null); // Validate submitted properties if (!ValidateProperties(propertyViewModels) | !_validationDictionary.IsValid) { return(false); } var entries = new Collection <DataEntry>( ( from property in propertyViewModels select new DataEntry() { DataEntryDesignDataEntryDesignID = property.DesignID, DataEntryDetails = GetDetailsFromProperty(property).ToList() }).ToList()); //Get animalProcedure var animalAdministration = _animalAdministrationRepository.Get(dataEntryViewModel.AnimalAdministrationID); if (animalAdministration == null) { // create new record animalAdministration = new AnimalAdministration() { AnimalID = dataEntryViewModel.AnimalID, StartTime = dataEntryViewModel.StartTime, EndTime = dataEntryViewModel.EndTime, CreatedBy = _userKey, LastUpdatedBy = _userKey, AdministrationID = dataEntryViewModel.AdministrationID, DataEntries = entries }; _animalAdministrationRepository.Add(animalAdministration); } else { //update current record foreach (var entry in animalAdministration.DataEntries) { entry.SoftDelete(true); } animalAdministration.DataEntries = entries; } return(true); }
public DataEntryViewModel GetDataEntryViewModels(int administrationid, int animalid, int projectId, int researchGroupId, int diseaseModelInductionId) { //Get animal var animal = _animalRepository.Get(animalid); //Get administration var administration = _administrationRepository.Get(administrationid); int procedureid = administration.ProcedureID; //Get active animaladministration var animalAdministration = _animalAdministrationRepository.GetCurrent() .FirstOrDefault(ap => ap.AnimalID == animalid && ap.AdministrationID == administrationid); if (animalAdministration == null) { animalAdministration = new AnimalAdministration() { AnimalID = animalid, Animal = animal, AnimalAdministrationID = 0, Administration = administration, AdministrationID = administrationid, StartTime = DateTime.Now, EndTime = DateTime.Now }; } //get any existing current dataentries var animalAdministrationEntries = animalAdministration.DataEntries != null?animalAdministration.DataEntries.Where(de => de.IsActive) : new Collection <DataEntry>(); //get any currrent designs from db for this procedure var designs = _dataEntryDesignRepository.GetCurrent().Where(de => de.ProcedureProcedureID == procedureid); //left join current designs with any current data entries in the database var query = from design in designs.AsEnumerable() join entry in animalAdministrationEntries.AsEnumerable() on design equals entry.DataEntryDesign into designEntriesGroup //set default entry value for design without any current entries from entries in designEntriesGroup.DefaultIfEmpty(new DataEntry()).AsEnumerable() select new DataEntryFieldViewModel { ProjectID = projectId, ResearchGroupID = researchGroupId, AnimalID = animalid, ProcedureID = procedureid, DataEntryID = entries.DataEntryID, DataEntryFieldName = design.DataEntryField.DataEntryFieldName, DesignID = design.DataEntryDesignID, ViewModelType = _viewModelTypeByFieldType[design.DataEntryField.FieldType.OptionValue], Mandatory = design.Mandatory, Multiple = design.Multiple, Options = GetOptionsFromDesignId(design.DataEntryDesignID), DataEntryDetails = GetDataEntryDetailViewModels(entries.DataEntryDetails, design.DataEntryField.FieldType.OptionValue) }; //Create DataEntryViewModel from existing AnimalProcedure or create default new view model if none exists yet var dataEntryViewModel = new DataEntryViewModel() { StartTime = animalAdministration.StartTime, EndTime = animalAdministration.EndTime, ProcedureName = administration.Procedure.OptionsProcedureType.OptionValue, Species = animal.Cohort.Strain.StrainName, Strain = animal.Cohort.Strain.Species.SpeciesName, AnimalLabel = animal.AnimalLabel, AnimalID = animalid, ProjectID = projectId, ResearchGroupID = researchGroupId, DiseaseModelInductionID = diseaseModelInductionId, // ReSharper disable once PossibleNullReferenceException AnimalAdministrationID = animalAdministration.AnimalAdministrationID, AdministrationID = administrationid, ProcedureID = procedureid, Properties = new Collection <DataEntryFieldViewModel>(query.ToList()) }; return(dataEntryViewModel); }