public IActionResult Generate(int id) { var report = _context.Reports .Where(r => r.ID == id) .Include(r => r.ReportType) .FirstOrDefault(); if (report.ReportType.Discriminator == "SGRQReportType") { var reportBuilder = new SGRQReportBuilder(_context, report); return(GetFileContentResult(reportBuilder.Build(), ".xlsx", EXCEL_2007_CONTENT_TYPE)); } else if (report.ReportType.Discriminator == "CPAMortalityAudit") { var stream = System.IO.File.Open(report.InputFilePath, FileMode.Open); var cPAMortalityAuditReportBuilder = new CPAMortalityAuditReportBuilder(_context, _logger, stream); return(GetFileContentResult(cPAMortalityAuditReportBuilder.Build(), ".xlsx", EXCEL_2007_CONTENT_TYPE)); } return(null); }
public IActionResult Create([Bind("ID, StartDate, EndDate, PatientIds")] Report report) { if (Request.Form.Files.Count > 0) { IFormFile file = Request.Form.Files[0]; string webRootPath = _hostingEnvironment.WebRootPath; Action <FileStream, IFormFile, string> readFileAction = (stream, formFile, extension) => { var reportBuilder = new CPAMortalityAuditReportBuilder(_context, stream, _logger, formFile); string newPath = Path.Combine(webRootPath, "Upload"); string fileExtension = Path.GetExtension(file.FileName).ToLower(); string fullPath = Path.Combine(newPath, file.FileName); report.InputFilePath = fullPath; reportBuilder.Build(); }; FileImporter.Import(file, webRootPath, readFileAction); var reportType = _context.ReportTypes .FirstOrDefault(rt => rt.Discriminator == "CPAMortalityAudit"); report.ReportTypeId = reportType.ID; _context.Reports.Update(report); _context.SaveChanges(); return(Json(new { success = true, id = report.ID })); } else { var reportType = _context.ReportTypes .FirstOrDefault(rt => rt.Discriminator == Request.Form["ReportTypeID"]); StringValues patientIds; if (reportType == null) { return(Json(new { success = false })); } var reportItems = new List <PatientReportItem>(); if (!string.IsNullOrEmpty(Request.Form["PatientIds"])) { patientIds = Request.Form["PatientIds"]; } if (patientIds.ToList()[0] == "null") { ModelState.AddModelError("Base", "You need to add at least one patient to this report"); } if (patientIds.ToList()[0] != "null" && !string.IsNullOrEmpty(patientIds)) { var idsToFind = patientIds.ToString() .Split(",") .Select(id => Int32.Parse(id)) .ToList(); var patients = _context.Patients.Where(p => idsToFind.Contains(p.ID)); foreach (var patient in patients) { var patientReportItem = new PatientReportItem() { PatientId = patient.ID }; reportItems.Add(patientReportItem); } } report.ReportTypeId = reportType.ID; report.PatientReportItems = reportItems; if (ModelState.IsValid) { _context.Reports.Update(report); _context.SaveChanges(); return(Json(new { success = true, id = report.ID })); } else { Hashtable errors = ModelStateHelper.Errors(ModelState); return(Json(new { success = false, errors })); } } }