示例#1
0
        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));
        }
示例#2
0
        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));
        }