public ActionResult Upload(SuspectConditionFileUploadEditModel model, HttpPostedFileBase suspectConditionUploadFile) { if (Request.Files.Count < 1 || suspectConditionUploadFile == null) { model.FeedbackMessage = FeedbackMessageModel.CreateFailureMessage("No file has been uploaded. Please upload a csv file."); return(View(model)); } var uploadMediaLocation = _mediaRepository.GetSuspectConditionUploadMediaFileLocation(); model.SampleCsvMediaUrl = _mediaRepository.GetSamplesLocation().Url; HttpPostedFileBase file = Request.Files[0]; var physicalPath = uploadMediaLocation.PhysicalPath; var fileUploadedName = (Path.GetFileNameWithoutExtension(file.FileName) + Path.GetExtension(file.FileName)).Replace("'", "").Replace("&", ""); var fileName = (Path.GetFileNameWithoutExtension(fileUploadedName) + "_" + DateTime.Now.ToString("MMddyyyyhhmmss") + Path.GetExtension(fileUploadedName)).Replace("'", "").Replace("&", ""); var fullPath = physicalPath + fileName; file.SaveAs(fullPath); var csvReader = IoC.Resolve <ICsvReader>(); var customerTable = csvReader.ReadWithTextQualifier(fullPath); if (customerTable.Rows.Count == 0) { model.FeedbackMessage = FeedbackMessageModel.CreateFailureMessage("Uploaded file has no data."); return(View(model)); } var columns = customerTable.Columns.Cast <DataColumn>().Select(x => x.ColumnName).ToArray(); var missingColumnNames = _suspectConditionUploadHelper.CheckForColumns(columns); if (!string.IsNullOrEmpty(missingColumnNames)) { model.FeedbackMessage = FeedbackMessageModel.CreateFailureMessage("Missing Column Name(s) : " + missingColumnNames); return(View(model)); } var files = new Core.Application.Domain.File { Path = fileName, FileSize = file.ContentLength, Type = FileType.Csv, UploadedBy = new OrganizationRoleUser(_session.UserSession.CurrentOrganizationRole.OrganizationRoleUserId), UploadedOn = DateTime.Now }; files = _fileRepository.Save(files); var suspectConditionUpload = new SuspectConditionUpload { FileId = files.Id, UploadTime = DateTime.Now, StatusId = (long)SuspectConditionUploadStatus.UploadStarted, UploadedBy = _session.UserSession.CurrentOrganizationRole.OrganizationRoleUserId, TotalCount = customerTable.Rows.Count, ParseStartTime = DateTime.Now }; suspectConditionUpload = _suspectConditionUploadRepository.Save(suspectConditionUpload); model.TotalRecords = customerTable.Rows.Count; model.IsUploadSucceded = true; model.IsParseSucceded = false; model.FileName = fileName; model.FailedRecordsFile = Path.GetFileNameWithoutExtension(fileName) + "_Failed" + ".csv"; if (suspectConditionUpload != null && suspectConditionUpload.Id > 0) { model.SuspectConditionUploadId = suspectConditionUpload.Id; } var failureRecords = uploadMediaLocation.PhysicalPath + model.FailedRecordsFile; _suspectConditionUploadHelper.CreateHeaderFileRecord(failureRecords, customerTable); return(View(model)); }
public JsonResult UploadSuspectConditions(UploadSuspectCondition model) { var fileName = model.FileName; var pageSize = model.PageSize; var failedRecordsFile = model.FailedRecordsFile; var pageNumber = model.PageNumber; var suspectConditionModel = new SuspectConditionFileUploadEditModel { FileName = fileName, SuspectConditionUploadId = model.SuspectConditionUploadId }; var mediaLocation = _mediaRepository.GetSuspectConditionUploadMediaFileLocation(); var file = mediaLocation.PhysicalPath + suspectConditionModel.FileName; var csvReader = IoC.Resolve <ICsvReader>(); var failureRecords = mediaLocation.PhysicalPath + failedRecordsFile; var failedRecordsList = new List <SuspectConditionUploadLog>(); var customerTable = csvReader.ReadWithTextQualifier(file); try { var query = customerTable.AsEnumerable(); var rows = query.Skip(pageSize * (pageNumber - 1)).Take(pageSize); var customerToRender = rows.Count(); var suspectConditionUploadLogs = rows.Select(row => _suspectConditionUploadHelper.GetUploadLog(row, model.SuspectConditionUploadId)).ToList(); suspectConditionModel.TotalRecords = customerTable.Rows.Count; _SuspectConditionService.ParseSuspectCondition(suspectConditionUploadLogs, failedRecordsList); if (failedRecordsList.Any()) { var suspectConditionFailedRecords = Mapper.Map <IEnumerable <SuspectConditionUploadLog>, IEnumerable <SuspectConditionUploadLogViewModel> >(failedRecordsList); _suspectConditionUploadHelper.UpdateFailedRecords(failureRecords, suspectConditionFailedRecords); if (model.LogFileId < 1) { var fileInfo = new FileInfo(failureRecords); var files = new Core.Application.Domain.File { Path = fileInfo.Name, FileSize = fileInfo.Length, Type = FileType.Csv, UploadedBy = new OrganizationRoleUser(_session.UserSession.CurrentOrganizationRole.OrganizationRoleUserId), UploadedOn = DateTime.Now }; files = _fileRepository.Save(files); model.LogFileId = files.Id; } } var totalPages = suspectConditionModel.TotalRecords / pageSize + (suspectConditionModel.TotalRecords % pageSize != 0 ? 1 : 0); suspectConditionModel.FailedRecords = failedRecordsList.Count; suspectConditionModel.UploadedRecords = customerToRender - suspectConditionModel.FailedRecords; suspectConditionModel.IsParseSucceded = totalPages == pageNumber; if (suspectConditionModel.SuspectConditionUploadId > 0 && suspectConditionModel.IsParseSucceded) { var count = _suspectConditionUploadLogRepository.GetUploadFailedCount(suspectConditionModel.SuspectConditionUploadId); var suspectConditionUpload = _suspectConditionUploadRepository.GetById(suspectConditionModel.SuspectConditionUploadId); suspectConditionUpload.SuccessfullUploadCount = (suspectConditionModel.TotalRecords - count); suspectConditionUpload.FailedUploadCount = count; if (model.LogFileId > 0) { suspectConditionUpload.LogFileId = model.LogFileId; } suspectConditionUpload.StatusId = (long)SuspectConditionUploadStatus.Parsed; suspectConditionUpload.ParseEndTime = DateTime.Now; _suspectConditionUploadRepository.Save(suspectConditionUpload); suspectConditionModel.FailedRecordsListPath = _suspectConditionUploadHelper.CheckIsFileContainsRecord(mediaLocation, failedRecordsFile); } } catch (Exception ex) { var suspectConditionUpload = _suspectConditionUploadRepository.GetById(suspectConditionModel.SuspectConditionUploadId); var count = _suspectConditionUploadLogRepository.GetUploadFailedCount(suspectConditionModel.SuspectConditionUploadId); suspectConditionUpload.SuccessfullUploadCount = (suspectConditionModel.TotalRecords - count); suspectConditionUpload.FailedUploadCount = count; suspectConditionUpload.StatusId = (long)SuspectConditionUploadStatus.ParseFailed; suspectConditionUpload.ParseEndTime = DateTime.Now; if (model.LogFileId > 0) { suspectConditionUpload.LogFileId = model.LogFileId; } _suspectConditionUploadRepository.Save(suspectConditionUpload); suspectConditionModel.FeedbackMessage = FeedbackMessageModel.CreateFailureMessage(ex.Message); } return(Json(new { suspectConditionModel.FileName, UploadedRecords = suspectConditionModel.UploadedRecords, FailedRecords = suspectConditionModel.FailedRecords, suspectConditionModel.IsParseSucceded, PageNumber = pageNumber + 1, FailedRecordsListPath = suspectConditionModel.FailedRecordsListPath, LogFileId = model.LogFileId, suspectConditionModel.FeedbackMessage, }, JsonRequestBehavior.AllowGet)); }