private IEnumerable <LabelEntity> MarkLabelsAsProcessedAndGetMissing(DatabaseConnectionModel connectionModel1, DatabaseConnectionModel connectionModel2, LabelsGeneratorDbTables tables, DateTime date) { using (var context1 = _contextFactory.GetContext(connectionModel1, tables)) using (var context2 = _contextFactory.GetContext(connectionModel2, tables)) { var reportId = Guid.NewGuid(); var startDate = date.StartOfDay(); var endDate = date.EndOfDayForDatabase(); var labels = context1.Set <LabelEntity>().Where(x => x.Status == 0 && x.CreateDate >= startDate && x.CreateDate <= endDate).ToArray(); var labelIdentifiers = labels.Select(x => x.UniqueID.Trim()).ToArray(); var identifiers = context2.Set <CustomerEntity>().Where(x => labelIdentifiers.Contains(x.UniqueID.Trim())).Select(x => x.UniqueID.Trim()).ToArray(); var foundLabels = labels.Where(x => identifiers.Contains(x.UniqueID.Trim())).ToArray(); foreach (var label in foundLabels) { label.Status = 1; } context1.SaveChanges(); var notFoundLabels = labels.Where(x => !identifiers.Contains(x.UniqueID.Trim())).ToArray(); return(notFoundLabels); } }
/// <summary> /// Marks all labels found in dbo.isCUSTOMER table with status = 1 and generates report with not found ones /// </summary> /// <param name="connectionModel1">The labels DB connection model</param> /// <param name="connectionModel2">The customer DB connection model</param> /// <param name="date">The current date</param> public XLWorkbook MarkLabelsProcessedAndGenerateReport(DatabaseConnectionModel connectionModel1, DatabaseConnectionModel connectionModel2, LabelsGeneratorDbTables tables, DateTime date, out Boolean isReportContainData) { var labels = MarkLabelsAsProcessedAndGetMissing(connectionModel1, connectionModel2, tables, date); return(GenerateReport(labels, out isReportContainData)); }