Exemplo n.º 1
0
        public async Task <IActionResult> Import([FromForm] MeddraFileForImportDto meddraFileForImportDto)
        {
            if (meddraFileForImportDto == null)
            {
                ModelState.AddModelError("Message", "Unable to locate payload for new import");
            }

            if (meddraFileForImportDto.Source.Length > 0)
            {
                if (Path.GetExtension(meddraFileForImportDto.Source.FileName).Replace(".", "").ToLower() != "zip")
                {
                    ModelState.AddModelError("Message", "File is not of type ZIP");
                }
                if (Path.GetFileNameWithoutExtension(meddraFileForImportDto.Source.FileName).ToLower() != "medascii")
                {
                    ModelState.AddModelError("Message", "File name incorrect");
                }

                if (ModelState.IsValid)
                {
                    var generatedDate = DateTime.Now.ToString("med_yyyyMMddhhmmss");

                    // Store zip file in temp folder for extraction
                    var fileNameAndPath = $"{Path.GetTempPath()}{meddraFileForImportDto.Source.FileName}";
                    using (var fileStream = new FileStream(fileNameAndPath, FileMode.Create))
                    {
                        await meddraFileForImportDto.Source.CopyToAsync(fileStream);
                    }

                    var subDirectory = $"{Path.GetTempPath()}\\{generatedDate}";
                    // create a sub directory for zip decompression
                    Directory.CreateDirectory(subDirectory);

                    // uncompress into sub-directory
                    using (var zip = new ZipFile(fileNameAndPath))
                    {
                        zip.ExtractAll($"{Path.GetTempPath()}\\{generatedDate}");
                    }

                    var response = _medDraService.ValidateSourceData(meddraFileForImportDto.Source.FileName, subDirectory);
                    response += _medDraService.ImportSourceData(meddraFileForImportDto.Source.FileName, subDirectory);

                    return(Ok());
                }

                return(BadRequest(ModelState));
            }
            else
            {
                return(BadRequest());
            }
        }
Exemplo n.º 2
0
        public ActionResult ManageMedDRA(MedDRAListModel model, string button)
        {
            ViewBag.MenuItem = CurrentMenuItem;

            if (button == "Search")
            {
                if (!String.IsNullOrWhiteSpace(model.FindTerm))
                {
                    if (Regex.Matches(model.FindTerm, @"[a-zA-Z]").Count < model.FindTerm.Length)
                    {
                        ModelState.AddModelError("FindTerm", "Term contains invalid characters (Enter A-Z, a-z)");
                    }
                    if (model.FindTerm.Length < 4)
                    {
                        ModelState.AddModelError("FindTerm", "Term must be at least 4 characters");
                    }
                }
                else
                {
                    ModelState.AddModelError("FindTerm", "Term must be entered");
                }

                if (ModelState.IsValid)
                {
                    if (model.TermType == "All")
                    {
                        model.ListItems = _unitOfWork.Repository <TerminologyMedDra>()
                                          .Queryable().Include("Parent")
                                          .Where(tm => tm.MedDraTerm.Contains(model.FindTerm))
                                          .ToArray()
                                          .Select(tm => new MedDRAListItemModel
                        {
                            Code       = tm.MedDraCode,
                            MedDRAId   = tm.Id,
                            ParentTerm = tm.Parent != null ? tm.Parent.DisplayName : "",
                            Term       = tm.MedDraTerm,
                            TermType   = tm.MedDraTermType,
                            Version    = tm.MedDraVersion
                        })
                                          .ToArray();
                    }
                    else
                    {
                        model.ListItems = _unitOfWork.Repository <TerminologyMedDra>()
                                          .Queryable().Include("Parent")
                                          .Where(tm => tm.MedDraTermType == model.TermType && tm.MedDraTerm.Contains(model.FindTerm))
                                          .ToArray()
                                          .Select(tm => new MedDRAListItemModel
                        {
                            Code       = tm.MedDraCode,
                            MedDRAId   = tm.Id,
                            ParentTerm = tm.Parent != null ? tm.Parent.DisplayName : "",
                            Term       = tm.MedDraTerm,
                            TermType   = tm.MedDraTermType,
                            Version    = tm.MedDraVersion
                        })
                                          .ToArray();
                    }

                    // Prepare drop downs
                    ViewBag.TermTypes = new[]
                    {
                        new SelectListItem {
                            Value = "ALL", Text = "All Classes"
                        },
                        new SelectListItem {
                            Value = "SOC", Text = "System Organ Class"
                        },
                        new SelectListItem {
                            Value = "HLGT", Text = "High Level Group Term"
                        },
                        new SelectListItem {
                            Value = "HLT", Text = "High Level Term"
                        },
                        new SelectListItem {
                            Value = "PT", Text = "Preferred Term"
                        },
                        new SelectListItem {
                            Value = "LLT", Text = "Lowest Level Term", Selected = true
                        }
                    };

                    return(View(model));
                }
            }
            else // Import
            {
                string fileName = Path.GetFileName(model.InputFile.FileName);

                bool err = false;

                /*****************************************
                * Validation
                *****************************************/
                if (Path.GetExtension(fileName).ToLower() != ".zip")
                {
                    _summary += String.Format("<li>ERROR: File is not of type ZIP...</li>");
                    err       = true;
                }
                if (Path.GetFileNameWithoutExtension(fileName).ToLower() != "medascii")
                {
                    _summary += String.Format("<li>ERROR: File name incorrect...</li>");
                    err       = true;
                }

                if (err == false)
                {
                    try
                    {
                        var generatedDate = DateTime.Now.ToString("med_yyyyMMddhhmmss");

                        _mainDirectory = String.Format("{0}\\Temp\\", System.AppDomain.CurrentDomain.BaseDirectory);
                        _subDirectory  = String.Format("{0}\\Temp\\{1}\\", System.AppDomain.CurrentDomain.BaseDirectory, generatedDate);

                        // Create folder for purposes of storing zip file content
                        model.InputFile.SaveAs(_mainDirectory + fileName);
                        _summary += String.Format("<li>INFO: Zip file uploaded ...</li>");

                        // create a sub directory for the decompression
                        System.IO.Directory.CreateDirectory(_subDirectory);

                        // Now uncompress file
                        var zip = new ZipFile(_mainDirectory + fileName);
                        zip.ExtractAll(_subDirectory);
                        zip       = null;
                        _summary += String.Format("<li>INFO: Zip file extracted to {0}...</li>", generatedDate);

                        _summary += _meddraService.ValidateSourceData(fileName, _subDirectory);
                        _summary += _meddraService.ImportSourceData(fileName, _subDirectory);
                    }
                    catch (Exception ex)
                    {
                        _summary += String.Format("<li>ERROR: {0}...</li>", ex.Message);
                        err       = true;
                    }
                }

                _summary     += "</ul>";
                model.Summary = _summary;

                model.ListItems = _unitOfWork.Repository <TerminologyMedDra>()
                                  .Queryable().Include("Parent")
                                  .Where(tm => tm.MedDraTerm.Contains(model.FindTerm))
                                  .ToArray()
                                  .Select(tm => new MedDRAListItemModel
                {
                    Code       = tm.MedDraCode,
                    MedDRAId   = tm.Id,
                    ParentTerm = tm.Parent != null ? tm.Parent.DisplayName : "",
                    Term       = tm.MedDraTerm,
                    TermType   = tm.MedDraTermType,
                    Version    = tm.MedDraVersion
                })
                                  .ToArray();

                // Prepare drop downs
                ViewBag.TermTypes = new[]
                {
                    new SelectListItem {
                        Value = "ALL", Text = "All Classes"
                    },
                    new SelectListItem {
                        Value = "SOC", Text = "System Organ Class"
                    },
                    new SelectListItem {
                        Value = "HLGT", Text = "High Level Group Term"
                    },
                    new SelectListItem {
                        Value = "HLT", Text = "High Level Term"
                    },
                    new SelectListItem {
                        Value = "PT", Text = "Preferred Term"
                    },
                    new SelectListItem {
                        Value = "LLT", Text = "Lowest Level Term", Selected = true
                    }
                };

                return(View(model));
            }

            model.ListItems = _unitOfWork.Repository <TerminologyMedDra>()
                              .Queryable().Include("Parent")
                              .Where(tm => tm.MedDraTermType == "SOC")
                              .ToArray()
                              .Select(tm => new MedDRAListItemModel
            {
                Code       = tm.MedDraCode,
                MedDRAId   = tm.Id,
                ParentTerm = tm.Parent != null ? tm.Parent.DisplayName : "",
                Term       = tm.MedDraTerm,
                TermType   = tm.MedDraTermType,
                Version    = tm.MedDraVersion
            })
                              .ToArray();

            // Prepare drop downs
            ViewBag.TermTypes = new[]
            {
                new SelectListItem {
                    Value = "ALL", Text = "All Classes"
                },
                new SelectListItem {
                    Value = "SOC", Text = "System Organ Class"
                },
                new SelectListItem {
                    Value = "HLGT", Text = "High Level Group Term"
                },
                new SelectListItem {
                    Value = "HLT", Text = "High Level Term"
                },
                new SelectListItem {
                    Value = "PT", Text = "Preferred Term"
                },
                new SelectListItem {
                    Value = "LLT", Text = "Lowest Level Term", Selected = true
                }
            };

            return(View(model));
        }