public IHttpActionResult GetResearchProjects()
        {
            using (var context = new CCFDataEntities())
            {
                var researchProjects = context.ResearchProjects
                                       .ToList()
                                       .Select(Mapper.Map <ResearchProject, ResearchProjectDto>);

                return(Ok(researchProjects));
            }
        }
        /**
         *  Author:         Zak Zinda
         *  Updated By:
         *  Date Updated:   12.6.18
         *  Description:    Return the project information for a selected research project.
         *  Parameters:     int id - The id of the project to query.
         */
        // GET /Api/ResearchProjects/1
        public IHttpActionResult GetResearchProject(int id)
        {
            using (var context = new CCFDataEntities())
            {
                var researchProject = context.ResearchProjects.SingleOrDefault(p => p.ProjectID == id);

                if (researchProject == null)
                {
                    return(BadRequest("The selected research project could not be found."));
                }

                return(Ok(Mapper.Map <ResearchProjectDto>(researchProject)));
            }
        }
示例#3
0
        public async Task <IHttpActionResult> Upload(int id)
        {
            if (!Request.Content.IsMimeMultipartContent())
            {
                return(BadRequest("File improperly formatted."));
            }

            string root     = HttpContext.Current.Server.MapPath("~/App_Data");
            var    provider = new MultipartFormDataStreamProvider(root);

            try
            {
                await Request.Content.ReadAsMultipartAsync(provider);

                var    file     = provider.FileData[0];
                string fileName = file.LocalFileName;

                string hasHeaderFormValue = provider.FormData.GetValues("hasHeader")[0];
                bool   hasHeader          = hasHeaderFormValue.Contains("yes") ? true : false;

                FileUploadHelper helper           = new FileUploadHelper();
                List <string>    accessionNumbers = helper.ParseFileToList(fileName, hasHeader);

                List <RejectedAccessionDto> rejectedAccessions = new List <RejectedAccessionDto>();

                using (var context = new CCFDataEntities())
                {
                    var researchProjectInDb = context.ResearchProjects.Single(p => p.ProjectID == id);

                    if (researchProjectInDb == null)
                    {
                        return(BadRequest("The selected research project does not exist."));
                    }

                    rejectedAccessions = ValidateUploadedAccessions(accessionNumbers, context, researchProjectInDb);
                }

                return(Ok(rejectedAccessions));
            }
            catch (InvalidCastException e)
            {
                return(InternalServerError(e));
            }
            catch (Exception e)
            {
                return(InternalServerError(e));
            }
        }
示例#4
0
        // GET: Dashboard/EditProject/1
        public ActionResult EditProject(int id)
        {
            using (var context = new CCFDataEntities())
            {
                var researchProject = context.ResearchProjects
                                      .SingleOrDefault(p => p.ProjectID == id);

                if (researchProject == null)
                {
                    return(HttpNotFound());
                }

                var viewModel = new DashboardViewModel
                {
                    ProjectId = researchProject.ProjectID
                };

                return(View(viewModel));
            }
        }
        public IHttpActionResult CreateResearchProject(ResearchProjectDto researchProjectDto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest("Invalid form data."));
            }

            var researchProject = Mapper.Map <ResearchProjectDto, ResearchProject>(researchProjectDto);

            researchProject.InsertDate = DateTime.Now;

            using (var context = new CCFDataEntities())
            {
                context.ResearchProjects.Add(researchProject);
                context.SaveChanges();
            }

            researchProjectDto.ProjectID  = researchProject.ProjectID;
            researchProjectDto.InsertDate = researchProject.InsertDate.ToShortDateString();

            return(Created(new Uri(Request.RequestUri + "/" + researchProject.ProjectID), researchProjectDto));
        }
        public IHttpActionResult Update(int id, ResearchProjectDto researchProjectDto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest("Invalid form data."));
            }

            using (var context = new CCFDataEntities())
            {
                var researchProjectInDb = context.ResearchProjects.SingleOrDefault(p => p.ProjectID == id);

                if (researchProjectInDb == null)
                {
                    return(BadRequest("The selected research project could not be found."));
                }

                Mapper.Map(researchProjectDto, researchProjectInDb);
                Mapper.Map(researchProjectInDb, researchProjectDto);

                context.SaveChanges();
            }

            return(Ok(researchProjectDto));
        }
示例#7
0
        public ActionResult DownloadKeyPairs(int projectId, int downloadType)
        {
            // Create new stringbuilder and empty file name.
            var sb       = new System.Text.StringBuilder();
            var fileName = "KeyPairs.csv";

            using (var context = new CCFDataEntities())
            {
                var researchProjectInDb = context.ResearchProjects.Single(p => p.ProjectID == projectId);

                // First check if the associated project exists.
                if (researchProjectInDb == null)
                {
                    return(HttpNotFound());
                }

                // Return all ResearchProjectAccession objects associated with that project.
                var keyPairs = context.ResearchProjectAccessions
                               .Where(p => p.ProjectID == projectId)
                               .ToList()
                               .Select(Mapper.Map <ResearchProjectAccession, KeyPairDto>);

                // Check if any key pairs exist. If not, skip downloadType check.
                if (keyPairs.Count() == 0)
                {
                    sb.Append("This project does not yet have any accession numbers uploaded.\r\n");
                }
                else
                {
                    // Checks downloadType.
                    // DownloadType.AccessionOnly = 1
                    // DownloadType.MRNOnly = 2
                    // DownloadType.Both = 3
                    switch (downloadType)
                    {
                    case DownloadType.AccessionOnly:
                        // Set appropriate file name.
                        fileName = "AccessionKeyPairs.csv";

                        // Add only accession numbers associated with that project to the file.
                        sb.Append("Accession,Randomized Accession\r\n");
                        foreach (var keyPair in keyPairs)
                        {
                            sb.AppendFormat("=\"{0}\",", keyPair.Accession.ToString());
                            sb.AppendFormat("=\"{0}\"\r\n", keyPair.AccessionGuid.ToString());
                        }
                        break;

                    case DownloadType.MRNOnly:
                        // Set appropriate file name.
                        fileName = "MRNKeyPairs.csv";

                        // Add only MRNs associated with that project to the file.
                        sb.Append("MRN,Randomized MRN\r\n");
                        foreach (var keyPair in keyPairs)
                        {
                            sb.AppendFormat("=\"{0}\",", keyPair.MRN.ToString());
                            sb.AppendFormat("=\"{0}\"\r\n", keyPair.MRNGuid.ToString());
                        }

                        break;

                    case DownloadType.Both:
                        // Set appropriate file name.
                        fileName = "AccessionAndMRNKeyPairs.csv";

                        // Add both accessions and MRNs to the file.
                        sb.Append("Accession,Randomized Accession,MRN,Randomized MRN\r\n");
                        foreach (var keyPair in keyPairs)
                        {
                            sb.AppendFormat("=\"{0}\",", keyPair.Accession.ToString());
                            sb.AppendFormat("=\"{0}\",", keyPair.AccessionGuid.ToString());
                            sb.AppendFormat("=\"{0}\",", keyPair.MRN.ToString());
                            sb.AppendFormat("=\"{0}\"\r\n", keyPair.MRNGuid.ToString());
                        }

                        break;

                    default:
                        break;
                    }
                }

                // Convert stringbuilder into a file string.
                string file = sb.ToString();
                // Return file as a csv.
                return(File(new System.Text.UTF8Encoding().GetBytes(file), "text/csv", fileName));
            }
        }
示例#8
0
        public List <RejectedAccessionDto> ValidateUploadedAccessions(List <string> accessions, CCFDataEntities context, ResearchProject researchProjectInDb)
        {
            List <RejectedAccessionDto> rejectedAccessions = new List <RejectedAccessionDto>();

            var projectId = researchProjectInDb.ProjectID;

            foreach (var accessionNumber in accessions)
            {
                RejectedAccessionDto rejectedAccession;
                // Ensure the accession number is an integer.
                if (!accessionNumber.All(char.IsDigit))
                {
                    rejectedAccession = new RejectedAccessionDto
                    {
                        Accession = accessionNumber,
                        Reason    = "Accession must be an integer."
                    };
                    rejectedAccessions.Add(rejectedAccession);
                    continue;
                }

                var convertedAccessionNumber = Convert.ToInt32(accessionNumber.Trim());

                var researchAccessionInDb = context.ResearchProjectAccessions
                                            .SingleOrDefault(a => a.ProjectID == projectId && a.Accession == convertedAccessionNumber);

                // Ensure the accession number has not already been added.
                if (researchAccessionInDb != null)
                {
                    rejectedAccession = new RejectedAccessionDto
                    {
                        Accession = accessionNumber,
                        Reason    = "Accession has already been added to the project."
                    };
                    rejectedAccessions.Add(rejectedAccession);
                    continue;
                }

                var globalAccessionInDb = context.GlobalAccessions
                                          .SingleOrDefault(a => a.Accession == convertedAccessionNumber);

                // Ensure the accession number exists globally.
                if (globalAccessionInDb == null)
                {
                    rejectedAccession = new RejectedAccessionDto
                    {
                        Accession = accessionNumber,
                        Reason    = "Accession does not exist in the global database."
                    };
                    rejectedAccessions.Add(rejectedAccession);
                    continue;
                }

                //accession passed validation, create an accession object to add to the database
                var accession = new ResearchProjectAccession()
                {
                    ResearchProject = researchProjectInDb,
                    Accession       = globalAccessionInDb.Accession,
                    AccessionGUID   = Guid.NewGuid(), //deidentified accession number
                    MRN             = globalAccessionInDb.MRN,
                    MRNGUID         = Guid.NewGuid()
                };

                context.ResearchProjectAccessions.Add(accession);
                context.SaveChanges();
            }

            return(rejectedAccessions);
        }