Example #1
0
        public void PollForPatientDetailReportParsing()
        {
            var outboundUploads = _outboundUploadRepository.GetAllUploadedFilesByType((long)OutboundUploadType.PatientDetail);

            if (outboundUploads == null || !outboundUploads.Any())
            {
                _logger.Info("No new files uploaded.");
                return;
            }

            var accountIds = _accountIds.Split(',');

            foreach (var accountId in accountIds)
            {
                var account = _corporateAccountRepository.GetById(Convert.ToInt32(accountId));

                var fileLocation         = _mediaRepository.GetOutboundUploadMediaFileLocation(account.FolderName, "PatientDetail");
                var archivedFileLocation = _mediaRepository.GetOutboundUploadMediaFileLocation(account.FolderName, "PatientDetailArchived");

                foreach (var outboundUpload in outboundUploads)
                {
                    try
                    {
                        outboundUpload.StatusId       = (long)OutboundUploadStatus.Parsing;
                        outboundUpload.ParseStartTime = DateTime.Now;
                        _outboundUploadRepository.Save(outboundUpload);

                        var file = _fileRepository.GetById(outboundUpload.FileId);

                        if (!System.IO.File.Exists(fileLocation.PhysicalPath + file.Path))
                        {
                            _logger.Info("File not found : " + fileLocation.PhysicalPath + file.Path);
                            continue;
                        }

                        _logger.Info("Importing File : " + file.Path);

                        DataTable table = _csvReader.ReadWithTextQualifier(fileLocation.PhysicalPath + file.Path);

                        if (table.Rows.Count <= 0)
                        {
                            _logger.Info("No rows found.");
                            outboundUpload.ParseEndTime = DateTime.Now;
                            outboundUpload.StatusId     = (long)OutboundUploadStatus.Parsed;
                            _outboundUploadRepository.Save(outboundUpload);
                            continue;
                        }

                        var successRows = 0;

                        foreach (DataRow row in table.Rows)
                        {
                            var model = GetPatientDetailModel(row);
                            try
                            {
                                if (string.IsNullOrEmpty(model.MedicalRecordNo))
                                {
                                    _logger.Info("MedicalRecordNo empty for MemberId : " + model.MaPlanMemberId);
                                    continue;
                                }

                                var medicalRecordNo = Convert.ToInt64(model.MedicalRecordNo);

                                var eventCustomer = _eventCustomerRepository.GetByCustomerIdAndEventDate(medicalRecordNo, model.AwvDate);
                                if (eventCustomer == null)
                                {
                                    _logger.Info("Event Customer not found for Medical Record No : " + model.MedicalRecordNo + " and Awv Date : " + model.AwvDate);
                                    continue;
                                }

                                eventCustomer.PatientDetailId = model.Id;

                                _eventCustomerRepository.Save(eventCustomer);

                                successRows++;
                            }
                            catch (Exception ex)
                            {
                                _logger.Error("While Parsing Patient Detail for Medical Record No : " + model.MedicalRecordNo);
                                _logger.Error("Message: " + ex.Message);
                                _logger.Error("Stack Tracke: " + ex.StackTrace);
                            }
                        }

                        outboundUpload.SuccessUploadCount = successRows;
                        outboundUpload.FailedUploadCount  = table.Rows.Count - successRows;
                        outboundUpload.ParseEndTime       = DateTime.Now;
                        outboundUpload.StatusId           = successRows > 0 ? (long)OutboundUploadStatus.Parsed : (long)OutboundUploadStatus.ParseFailed;
                        _outboundUploadRepository.Save(outboundUpload);

                        if (successRows > 1)
                        {
                            System.IO.File.Move(fileLocation.PhysicalPath + file.Path, archivedFileLocation.PhysicalPath + file.Path);
                            ((IFileRepository)_fileRepository).MarkasArchived(file.Id);
                        }
                    }
                    catch (Exception ex)
                    {
                        _logger.Error("While Parsing File.");
                        _logger.Error("Message: " + ex.Message);
                        _logger.Error("Stack Tracke: " + ex.StackTrace);

                        outboundUpload.StatusId = (long)OutboundUploadStatus.ParseFailed;
                        _outboundUploadRepository.Save(outboundUpload);
                    }
                }
            }
        }