public ScenarioCampaignFailureOutput ProcessFile(Guid scenarioId, string folder)
        {
            string filename = FileHelpers.GetPathToFileIfExists(folder, FileName);
            var    result   = new ScenarioCampaignFailureOutput
            {
                ScenarioId = scenarioId,
                Data       = new List <ScenarioCampaignFailure>()
            };

            if (String.IsNullOrEmpty(filename))
            {
                return(result);
            }

            _auditEventRepository.Insert(AuditEventFactory.CreateAuditEventForInformationMessage(0,
                                                                                                 0, $"Processing output file {filename}"));

            var importSettings = CSVImportSettings.GetImportSettings(filename, typeof(ScenarioCampaignFailureHeaderMap), typeof(ScenarioCampaignFailureIndexMap));

            using var scenarioCampaignFailureImportRepository = new CSVScenarioCampaignFailureImportRepository(importSettings);

            var fileData = scenarioCampaignFailureImportRepository.GetAll();

            if (fileData is null || !fileData.Any())
            {
                _auditEventRepository.Insert(AuditEventFactory.CreateAuditEventForException(0, 0,
                                                                                            $"Error generating Scenario Campaign Failure, data not found", new ObjectNotFoundException()));

                return(result);
            }

            var salesAreas = _dataSnapshot.AllSalesAreas.Value.ToDictionary(s => s.CustomId);
            var campaigns  = _dataSnapshot.AllCampaigns.Value.ToDictionary(c => c.ExternalId);

            foreach (var data in fileData)
            {
                try
                {
                    _ = salesAreas.TryGetValue(data.SalesAreaNumber, out var salesArea);
                    _ = campaigns.TryGetValue(data.CampaignExternalId, out var campaign);
                    var salesAreaName      = salesArea?.Name ?? "Unknown";
                    var salesAreaGroupName = campaign?.SalesAreaCampaignTarget
                                             .Where(sact => !(sact.SalesAreaGroup is null))
                                             .Select(sact => sact.SalesAreaGroup)
                                             .FirstOrDefault(sag =>
                                                             sag.SalesAreas.Any(sa => sa.Equals(salesAreaName, StringComparison.OrdinalIgnoreCase)))
                                             ?.GroupName;

                    var scenarioCampaignFailure = new ScenarioCampaignFailure
                    {
                        ScenarioId                = scenarioId,
                        ExternalCampaignId        = data.CampaignExternalId,
                        SalesArea                 = salesAreaName,
                        SalesAreaGroup            = salesAreaGroupName,
                        Length                    = Duration.FromSeconds(data.SpotLength),
                        MultipartNo               = data.MultipartNumber,
                        StrikeWeightStartDate     = DateHelper.GetDate(data.StrikeWeightStartDate.ToString(), "yyyyMMdd"),
                        StrikeWeightEndDate       = DateHelper.GetDate(data.StrikeWeightEndDate.ToString(), "yyyyMMdd"),
                        DayPartStartTime          = ToTimeSpan(data.DayPartStartTime.ToString().PadLeft(6, '0')),
                        DayPartEndTime            = ToTimeSpan(data.DayPartEndTime.ToString().PadLeft(6, '0')),
                        DayPartDays               = data.DayPartDays,
                        FailureType               = data.FailureType,
                        FailureCount              = data.NumberOfFailures,
                        PassesEncounteringFailure = DecryptPassIds(data.PassesEncounteringFailure),
                    };

                    result.Data.Add(scenarioCampaignFailure);
                }
                catch (ObjectNotFoundException exception)
                {
                    _auditEventRepository.Insert(AuditEventFactory.CreateAuditEventForException(0, 0,
                                                                                                $"Error generating Scenario Campaign Failure for campaign id {data.CampaignExternalId}", exception));
                }
            }

            _auditEventRepository.Insert(AuditEventFactory.CreateAuditEventForInformationMessage(0,
                                                                                                 0, $"Processed output file {filename}"));

            return(result);
        }
 public void Add(ScenarioCampaignFailure scenarioCampaignFailure) =>
 _dbContext.Add(_mapper.Map <ScenarioCampaignFailureEntity>(scenarioCampaignFailure),
                post => post.MapTo(scenarioCampaignFailure), _mapper);