/// <summary> /// Importa os registros do arquivo de log(.CSV) e insere no banco de dados, importa apenas /// os registros da data especificada em "logDate" (ignora a hora, minutos e segundos em logDate) /// </summary> public Boolean ImportFile(String fileName, DateTime logDate) { // Informações de trace são enviadas ao listener através de NotifyListener() // O listener grava essas informações em log de arquivo CSVReader reader = new CSVReader(fileName, listener); NotifyListener("Fazendo a leitura do CSV."); DataTable fullTable = reader.Read(0); int rowCount = fullTable.Rows.Count; // Verifica se existem registros no CSV if (rowCount < 1) { NotifyListener("CSV inválido. Nenhum registro encontrado."); return(false); } // Informa a quantidade de registros no CSV e uma amostra de seu conteúdo NotifyListener("Quantidade de registros no CSV - " + rowCount); String sampleData = fullTable.Rows[0]["Date"].ToString() + " " + fullTable.Rows[0]["Time"].ToString() + " - " + fullTable.Rows[0]["User Name"].ToString() + " " + fullTable.Rows[0]["Print Pages"].ToString() + " página(s)"; NotifyListener("Amostra dos dados - " + sampleData); // Gera uma view do log apenas com as cópias DataView view = new DataView(fullTable, "Type='Copy'", null, DataViewRowState.Added); DataTable copiedDocumentTable = view.ToTable(); // Obtem o nome da impressora a partir do nome do arquivo String printerName = Path.GetFileNameWithoutExtension(fileName); CopiedDocumentDAO copiedDocumentDAO = new CopiedDocumentDAO(sqlConnection); CopiedDocument copiedDocument; foreach (DataRow row in copiedDocumentTable.Rows) { copiedDocument = new CopiedDocument(); copiedDocument.tenantId = tenantId; copiedDocument.jobTime = DateTime.Parse(row["Date"] + " " + row["Time"]); copiedDocument.userName = row["User Name"].ToString(); copiedDocument.printerName = printerName; copiedDocument.pageCount = int.Parse(row["Print Pages"].ToString()); copiedDocument.duplex = false; copiedDocument.color = false; // Insere no BD apenas se a data do registro for aquela que se deseja importar if (copiedDocument.jobTime.Date.CompareTo(logDate.Date) == 0) { copiedDocumentDAO.InsertCopiedDocument(copiedDocument); } } return(true); }
public override void BuildReport() { TenantDAO tenantDAO = new TenantDAO(sqlConnection); Tenant tenant = tenantDAO.GetTenant(tenantId); // Obtem a lista de documentos considerando o filtro (faixa de datas, usuário, impressora) CopiedDocumentDAO copiedDocumentDAO = new CopiedDocumentDAO(sqlConnection); List <Object> copiedDocuments = copiedDocumentDAO.GetCopiedDocuments(tenantId, startDate, endDate, userId, printerId); reportBuilder.OpenMedia(reportMedia); // Abre a mídia para o output do relatório Dictionary <String, Object> reportFilter = new Dictionary <String, Object>(); reportFilter.Add("tenantId", tenantId); reportFilter.Add("startDate", startDate); reportFilter.Add("endDate", endDate); reportFilter.Add("userId", userId); reportFilter.Add("printerId", printerId); reportBuilder.SetReportHeadings("Relatório de Cópias", tenant.alias, reportFilter); String[] columnNames = new String[] { "Data/Hora", "Usuário", "Copiadora", "Páginas" }; int[] columnWidths = new int[] { 45, 35, 40, 15 }; int rowCount = copiedDocuments.Count; reportBuilder.CreateDataTable(columnNames, columnWidths, rowCount); if (reportBuilder.IsNavigable()) { Dictionary <String, Object> exportOptions = ExportFormatContext.GetExportOptions(tenantId, sqlConnection); reportBuilder.SetNavigationData(this.GetType().Name, rowCount, exportOptions); // neste caso recordCount = rowCount reportBuilder.SetReportPage(action, currentPage); } for (int rowIndex = 0; rowIndex < rowCount; rowIndex++) { CopiedDocument copiedDocument = (CopiedDocument)copiedDocuments[rowIndex]; ReportCell[] cells = new ReportCell[] { new ReportCell(copiedDocument.jobTime.ToString()), new ReportCell(copiedDocument.userName), new ReportCell(copiedDocument.printerName), new ReportCell(copiedDocument.pageCount) }; reportBuilder.InsertRow(rowIndex, cells); } reportBuilder.CloseMedia(); }
/// <summary> /// Verifica se registros de log correspondentes ao período já foram inseridos no /// banco de dados /// </summary> public Boolean FileImported(DateRange dateRange) { Boolean imported = false; // Verifica se a faixa de datas foi fornecida if (dateRange == null) { return(false); } // Verifica se existe alguma impressão no intervalo de datas CopiedDocumentDAO copiedDocumentDAO = new CopiedDocumentDAO(sqlConnection); List <Object> copiedDocuments = copiedDocumentDAO.GetCopiedDocuments(tenantId, dateRange.GetFirstDay(), dateRange.GetLastDay(), null, null); if (copiedDocuments.Count > 0) { NotifyListener("Já existiam registros inseridos anteriormente para a data especificada."); imported = true; } return(imported); }
public int LogCopiedDocuments(List <CopiedDocument> copiedDocuments) { if (copiedDocuments == null) { return(0); } if (copiedDocuments.Count == 0) { return(0); } StartDBAccess(); int tenantId = copiedDocuments[0].tenantId; DateTime startDate = DateTime.Now.Date; DateTime endDate = startDate.Add(new TimeSpan(23, 59, 59)); JobDataDependency jobDataDependency = new JobDataDependency(copiedDocuments, dataAccess.GetConnection(), tenantId); jobDataDependency.CreateDataDependency(); CopiedDocumentDAO copiedDocumentDAO = new CopiedDocumentDAO(dataAccess.GetConnection()); List <Object> alreadyInserted = copiedDocumentDAO.GetCopiedDocuments(tenantId, startDate, endDate, null, null); int rowCount = 0; foreach (CopiedDocument copiedDocument in copiedDocuments) { currentJob = copiedDocument; if (alreadyInserted.Find(CheckCopiedDocument) == null) // Verifica se o registro já existe { // Caso não exista insere no banco copiedDocumentDAO.InsertCopiedDocument(copiedDocument); rowCount++; } } FinishDBAccess(); return(rowCount); }