Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }