private void GenerateLabsInboundReport(LabsInboundFilter filter)
        {
            var dataGen = new ExportableDataGenerator <LabsInboundViewModel, LabsInboundFilter>(_labsInboundReportService.GetLabsInboundReportList, _logger);
            var model   = dataGen.GetData(filter);

            var account = _corporateAccountRepository.GetById(filter.AccountId);

            if (model != null && !model.Collection.IsEmpty())
            {
                var folder = string.Format(_settings.FloridaBlueInboundReportPath, account.FolderName, DateTime.Now.ToString("yyyy-MM-dd"));

                if (!Directory.Exists(folder))
                {
                    DirectoryOperationsHelper.CreateDirectory(folder);
                }

                _logger.Info("Directory Path :" + folder);

                var fileName = _pipeDelimitedReportHelper.GetReportName(ReportType.LabsInbound);

                if (model.Collection != null && model.Collection.Any())
                {
                    var filePath = folder + "\\" + fileName + ".txt";
                    if (File.Exists(filePath))
                    {
                        _logger.Info("file Deleteing"); File.Delete(filePath);
                    }

                    _pipeDelimitedReportHelper.Write(model.Collection, folder, fileName + ".txt");

                    _logger.Info("File Generated at :" + folder + " file Name: " + fileName);

                    if (_sendReportToSftp)
                    {
                        try
                        {
                            _logger.Info("Sending file to SFTP.");

                            var destinationPath = _destinationSftpPath + "\\" + account.FolderName + "\\Download\\Reports";
                            SendFilesToSftp(Path.Combine(folder, fileName), destinationPath, fileName);

                            _logger.Info("File sent to SFTP.");
                        }
                        catch (Exception ex)
                        {
                            _logger.Info("Error sending file to SFTP.");
                            _logger.Error("Message : " + ex.Message);
                            _logger.Error("Stack Trace : " + ex.StackTrace);
                        }
                    }
                }
            }
            else
            {
                _logger.Info("No record found for " + account.Tag);
            }
        }
        public IEnumerable <CustomerEventTestState> GetForLabInboundReport(LabsInboundFilter filter, int pageNumber, int pageSize, out int totalRecords)
        {
            using (var adapter = PersistenceLayer.GetDataAccessAdapter())
            {
                var linqMetaData = new LinqMetaData(adapter);

                var account = filter.AccountId > 0 ? (from a in linqMetaData.Account where a.AccountId == filter.AccountId select a).SingleOrDefault() : null;

                var query = (from ecr in linqMetaData.EventCustomerResult
                             join ec in linqMetaData.EventCustomers on ecr.EventCustomerResultId equals ec.EventCustomerId
                             join ea in linqMetaData.EventAppointment on ec.AppointmentId equals ea.AppointmentId
                             join cp in linqMetaData.CustomerProfile on ec.CustomerId equals cp.CustomerId
                             join cest in linqMetaData.CustomerEventScreeningTests on ecr.EventCustomerResultId equals cest.EventCustomerResultId
                             join cets in linqMetaData.CustomerEventTestState on cest.CustomerEventScreeningTestId equals cets.CustomerEventScreeningTestId
                             join e in linqMetaData.Events on ecr.EventId equals e.EventId
                             where (ec.NoShow == false && ec.LeftWithoutScreeningReasonId == null) &&
                             (ea.CheckinTime != null && ea.CheckoutTime != null) &&
                             (!linqMetaData.TestNotPerformed.Select(x => x.CustomerEventScreeningTestId).Contains(cest.CustomerEventScreeningTestId)) &&
                             (filter.StartDate == null || ecr.DateModified >= filter.StartDate || ecr.RegenerationDate >= filter.StartDate) &&
                             (filter.EndDate == null || ecr.DateModified <= filter.EndDate || ecr.RegenerationDate <= filter.EndDate) &&
                             (account == null || cp.Tag == account.Tag) &&
                             ((e.EventDate < _resultFlowChangeDate && ecr.ResultState == (int)TestResultStateNumber.ResultDelivered) ||
                              (e.EventDate >= _resultFlowChangeDate && ecr.ResultState == (int)NewTestResultStateNumber.ResultDelivered))
                             select new { cets, ec.CustomerId });

                if (!filter.CustomTags.IsNullOrEmpty())
                {
                    var customTagCustomersIds = (from ct in linqMetaData.CustomerTag where ct.IsActive && filter.CustomTags.Contains(ct.Tag) select ct.CustomerId);
                    query = (from q in query where customTagCustomersIds.Contains(q.CustomerId) select q);
                }

                var entities = (from q in query select q.cets);

                totalRecords = entities.Count();

                var result = entities.OrderByDescending(x => x.CreatedOn).Skip((pageNumber - 1) * pageSize).Take(pageSize).ToArray();

                return(Mapper.Map <IEnumerable <CustomerEventTestStateEntity>, IEnumerable <CustomerEventTestState> >(result));
            }
        }
        public void PollForLabsInboundReport()
        {
            try
            {
                if (DateTime.Today.DayOfWeek != _dayOfWeek)
                {
                    _logger.Info(string.Format("Today is {0}. Job is set to run on {1}.", DateTime.Today.DayOfWeek, _dayOfWeek));
                    return;
                }

                var accountIds = _settings.FloridaBlueAccountId.Split(',');

                if (accountIds.IsNullOrEmpty())
                {
                    _logger.Info("No accounts found for Response Vendor Report.");
                    return;
                }

                _logger.Info("Starting Labs Inbound Report generation.");

                var customSettingFilePath = string.Format(_customSettingFile, ReportType.LabsInbound);
                var customSettings        = _customSettingManager.Deserialize(customSettingFilePath);

                var exportToTime   = DateTime.Now.AddHours(-1);
                var exportFromTime = customSettings.LastTransactionDate ?? _cutOffDate;

                foreach (var accountId in accountIds)
                {
                    _logger.Info("Generating Labs Inbound Report for Account ID : " + accountId);

                    var filter = new LabsInboundFilter
                    {
                        StartDate  = exportFromTime,
                        EndDate    = exportToTime,
                        AccountId  = Convert.ToInt32(accountId),
                        CustomTags = _settings.FloridaBlueMedicareCustomTags
                    };

                    if (filter.AccountId == _settings.FloridaBlueCommercialId)
                    {
                        filter.CustomTags = _settings.FloridaBlueCommercialCustomTags;
                    }
                    else if (filter.AccountId == _settings.FloridaBlueMammoId)
                    {
                        filter.CustomTags = _settings.FloridaBlueMammoCustomTags;
                    }
                    else if (filter.AccountId == _settings.FloridaBlueGapsId)
                    {
                        filter.CustomTags = _settings.FloridaBlueGapsCustomTags;
                    }

                    GenerateLabsInboundReport(filter);

                    customSettings.LastTransactionDate = exportToTime;
                    _customSettingManager.SerializeandSave(customSettingFilePath, customSettings);
                }

                _logger.Info("Completed Labs Inbound Report generation.");
            }
            catch (Exception ex)
            {
                _logger.Error("Some error occured while generating Labs Inbound Report");
                _logger.Error("Exception: " + ex.Message);
                _logger.Error("Stack Trace: " + ex.StackTrace);
            }
        }