private Boolean CheckPrintedDocument(Object obj) { PrintedDocument current = (PrintedDocument)currentJob; PrintedDocument match = (PrintedDocument)obj; if (current.jobTime != match.jobTime) { return(false); } String currentName = current.name; // Limita o tamanho do nome em 100 caracteres para fazer a comparação // o nome vindo do BD já esta truncado pois é um varchar(100) if (currentName.Length > 100) { currentName = current.name.Substring(0, 100); } if (currentName != match.name) { return(false); } return(true); }
// Cria o arquivo onde será guardado um resumo do csv original public void Create(DateTime?fileDate) { if (fileDate == null) { return; } String logName = "PrintLog-" + DateFormat.Adjust(fileDate) + ".csv"; String applicationFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); String logFolder = PathFormat.Adjust(applicationFolder) + @"PrintLogs\"; Directory.CreateDirectory(logFolder); fileLogger = new FileLogger(logFolder + logName); fileLogger.FileHeader = new String[2]; fileLogger.FileHeader[0] = "Digest File - Source: Papercut Print Logger"; fileLogger.FileHeader[1] = "Time,User,Printer,Document Name,Pages,Copies,Duplex,Color,DataType,Size"; CSVReader csvReader = new CSVReader(logFolder + logName, null); DataTable alreadyInsertedTable = csvReader.Read(); alreadyInserted = new List <Object>(); foreach (DataRow row in alreadyInsertedTable.Rows) { PrintedDocument printedDocument = new PrintedDocument(); printedDocument.jobTime = DateTime.Parse(row["Time"].ToString()); printedDocument.name = row["Document Name"].ToString(); alreadyInserted.Add(printedDocument); } }
/// <summary> /// Adiciona um documento a ser enviado, quando a lista atinge o tamanho máximo do buffer /// realiza o envio /// </summary> public void AddPrintedDocument(PrintedDocument printedDocument) { printedDocumentList.Add(printedDocument); if (printedDocumentList.Count >= bufferSize) { SendPrintLogs(); } }
private Boolean ProcessPrintLogFile(String fileName, PrintLogSender printLogSender) { // 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(); 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]["Time"].ToString() + " - " + fullTable.Rows[0]["Document Name"].ToString(); NotifyListener("Amostra dos dados - " + sampleData); // Gera uma view do log com uma faixa de horário String startHour = DateTime.Now.AddHours(-1).ToString("yyyy-MM-dd HH:mm:ss"); String endHour = DateTime.Now.AddHours(+1).ToString("yyyy-MM-dd HH:mm:ss"); String rowFilter = "Time > '" + startHour + "' AND Time < '" + endHour + "'"; DataView view = new DataView(fullTable, rowFilter, null, DataViewRowState.Added); DataTable printedDocumentTable = view.ToTable(); // Cria arquivo que armazenará resumo dos trabalhos de impressão DateTime? fileDate = PrintLogFile.GetDate(fileName); PrintLogDigest digest = new PrintLogDigest(); digest.Create(fileDate); PrintedDocument printedDocument; foreach (DataRow row in printedDocumentTable.Rows) { printedDocument = new PrintedDocument(); printedDocument.tenantId = tenantId; printedDocument.jobTime = DateTime.Parse(row["Time"].ToString()); printedDocument.userName = row["User"].ToString(); printedDocument.printerName = row["Printer"].ToString(); printedDocument.name = row["Document Name"].ToString(); printedDocument.pageCount = int.Parse(row["Pages"].ToString()); printedDocument.copyCount = int.Parse(row["Copies"].ToString()); printedDocument.duplex = ConvertToBool(row["Duplex"].ToString()); printedDocument.color = !ConvertToBool(row["Grayscale"].ToString()); printLogSender.AddPrintedDocument(printedDocument); digest.AddToDigest(printedDocument, row["Language"].ToString(), row["Size"].ToString()); } return(true); }
public IActionResult GetPrintings([FromRoute] string name) { PrintedDocument doc = PrintingRepository.CheckPrintRequestStatus(name); if (doc != null) { return(Json(doc)); } return(StatusCode(404, "Not Found")); }
/// <summary> /// Importa os registros do arquivo de log(.CSV) e insere no banco de dados /// </summary> public Boolean ImportFile(String fileName) { DateTime?fileDate = PrintLogFile.GetDate(fileName); // 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 printedDocumentTable = reader.Read(); int rowCount = printedDocumentTable.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 = printedDocumentTable.Rows[0]["Time"].ToString() + " - " + printedDocumentTable.Rows[0]["Document Name"].ToString(); NotifyListener("Amostra dos dados - " + sampleData); PrintedDocumentDAO printedDocumentDAO = new PrintedDocumentDAO(sqlConnection); CreateDigest(fileDate); PrintedDocument printedDocument; foreach (DataRow row in printedDocumentTable.Rows) { printedDocument = new PrintedDocument(); printedDocument.tenantId = tenantId; printedDocument.jobTime = DateTime.Parse(row["Time"].ToString()); printedDocument.userName = row["User"].ToString(); printedDocument.printerName = row["Printer"].ToString(); printedDocument.name = row["Document Name"].ToString(); printedDocument.pageCount = int.Parse(row["Pages"].ToString()); printedDocument.copyCount = int.Parse(row["Copies"].ToString()); printedDocument.duplex = ConvertToBool(row["Duplex"].ToString()); printedDocument.color = !ConvertToBool(row["Grayscale"].ToString()); printedDocumentDAO.InsertPrintedDocument(printedDocument); AddToDigest(printedDocument, row["Language"].ToString(), row["Size"].ToString()); } return(true); }
public void InsertPrintedDocument(PrintedDocument printedDocument) { ProcedureCall storePrintedDocument = new ProcedureCall("pr_storePrintedDocument", sqlConnection); storePrintedDocument.parameters.Add(new ProcedureParam("@tenantId", SqlDbType.Int, 4, printedDocument.tenantId)); storePrintedDocument.parameters.Add(new ProcedureParam("@jobTime", SqlDbType.DateTime, 8, printedDocument.jobTime)); storePrintedDocument.parameters.Add(new ProcedureParam("@userName", SqlDbType.VarChar, 100, printedDocument.userName)); storePrintedDocument.parameters.Add(new ProcedureParam("@printerName", SqlDbType.VarChar, 100, printedDocument.printerName)); storePrintedDocument.parameters.Add(new ProcedureParam("@name", SqlDbType.VarChar, 100, printedDocument.name)); storePrintedDocument.parameters.Add(new ProcedureParam("@pageCount", SqlDbType.Int, 4, printedDocument.pageCount)); storePrintedDocument.parameters.Add(new ProcedureParam("@copyCount", SqlDbType.Int, 4, printedDocument.copyCount)); storePrintedDocument.parameters.Add(new ProcedureParam("@duplex", SqlDbType.Bit, 1, printedDocument.duplex)); storePrintedDocument.parameters.Add(new ProcedureParam("@color", SqlDbType.Bit, 1, printedDocument.color)); storePrintedDocument.Execute(false); }
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) PrintedDocumentDAO printedDocumentDAO = new PrintedDocumentDAO(sqlConnection); List <Object> printedDocuments = printedDocumentDAO.GetPrintedDocuments(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 Impressões", tenant.alias, reportFilter); String[] columnNames = new String[] { "Data/Hora", "Usuário", "Impressora", "Páginas", "Nome do documento" }; int[] columnWidths = new int[] { 25, 25, 25, 15, 45 }; int rowCount = printedDocuments.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++) { PrintedDocument printedDocument = (PrintedDocument)printedDocuments[rowIndex]; ReportCell[] cells = new ReportCell[] { new ReportCell(printedDocument.jobTime.ToString()), new ReportCell(printedDocument.userName), new ReportCell(printedDocument.printerName), new ReportCell(printedDocument.pageCount * printedDocument.copyCount), new ReportCell(printedDocument.name) }; reportBuilder.InsertRow(rowIndex, cells); } reportBuilder.CloseMedia(); }
private Boolean CheckPrintedDocument(Object obj) { PrintedDocument current = (PrintedDocument)currentJob; PrintedDocument match = (PrintedDocument)obj; if (current.jobTime != match.jobTime) { return(false); } if (current.name != match.name) { return(false); } return(true); }
public void SendPrintedDocumentsToBackend(string token, PrintedDocument printedPages) { var client = new RestClient($"{_baseUrl}/api/PrintDocument"); var request = new RestRequest(Method.POST); request.AddHeader("cache-control", "no-cache"); request.AddHeader("authorization", $"Bearer {token}"); request.AddHeader("content-type", "application/json"); //string parametersForSend = ""; //foreach (var printedPage in printedPages) //{ //} request.AddParameter("application/json", JsonConvert.SerializeObject(printedPages), ParameterType.RequestBody); client.Execute(request); }
// Adiciona algumas informações da impressão ao resumo private void AddToDigest(PrintedDocument printedDocument, String language, String jobSize) { if (!createDigest) { return; } if (fileLogger == null) { return; } String jobTime = DateFormat.Adjust(printedDocument.jobTime, true); String dataType = language.ToUpper().Contains("EMF") ? "EMF" : "RAW"; String newRow = jobTime + "," + printedDocument.userName + "," + printedDocument.printerName + "," + printedDocument.name + "," + printedDocument.pageCount + "," + printedDocument.copyCount + "," + printedDocument.duplex + "," + "false" + "," + "EMF" + "," + jobSize; fileLogger.LogRawData(newRow); }
// Adiciona algumas informações da impressão ao resumo public void AddToDigest(PrintedDocument printedDocument, String language, String jobSize) { if (fileLogger == null) { return; } currentJob = printedDocument; if (alreadyInserted.Find(CheckPrintedDocument) == null) // Verifica se o registro já existe { // Caso não exista insere no resumo String jobTime = DateFormat.Adjust(printedDocument.jobTime, true); String dataType = language.ToUpper().Contains("EMF") ? "EMF" : "RAW"; String newRow = jobTime + "," + printedDocument.userName + "," + printedDocument.printerName + "," + printedDocument.name + "," + printedDocument.pageCount + "," + printedDocument.copyCount + "," + printedDocument.duplex + "," + "false" + "," + dataType + "," + jobSize; fileLogger.LogRawData(newRow); } }
/// <summary> /// Importa os registros do arquivo de log(.CSV) e insere no banco de dados /// </summary> public Boolean ImportFile(String fileName) { CSVReader reader = new CSVReader(fileName, null); DataTable printedDocumentTable = reader.Read(); int rowCount = printedDocumentTable.Rows.Count; // Verifica se existem registros no CSV if (rowCount < 1) { MessageBox.Show("CSV inválido. Nenhum registro encontrado."); return(false); } PrintedDocument printedDocument; foreach (DataRow row in printedDocumentTable.Rows) { printedDocument = new PrintedDocument(); printedDocument.tenantId = 1; printedDocument.jobTime = DateTime.Parse(row["Time"].ToString()); printedDocument.userName = row["User"].ToString(); printedDocument.printerName = row["Printer"].ToString(); printedDocument.name = row["Document Name"].ToString(); printedDocument.pageCount = int.Parse(row["Pages"].ToString()); printedDocument.copyCount = int.Parse(row["Copies"].ToString()); printedDocument.duplex = ConvertToBool(row["Duplex"].ToString()); printedDocument.color = !ConvertToBool(row["Grayscale"].ToString()); DBQuery query = new DBQuery(sqlConnection); query.Query = "DECLARE @pageCount INT" + Environment.NewLine + "SET @pageCount = " + printedDocument.pageCount + Environment.NewLine + "DECLARE @copyCount INT" + Environment.NewLine + "SET @copyCount = " + printedDocument.copyCount + Environment.NewLine + "DECLARE @duplex BIT" + Environment.NewLine + "SET @duplex = " + ConvertToBit(printedDocument.duplex) + Environment.NewLine + "DECLARE @color BIT" + Environment.NewLine + "SET @color = " + ConvertToBit(printedDocument.color) + Environment.NewLine + "-- Executa procedimento para garantir a existência do usuário no banco" + Environment.NewLine + "IF NOT EXISTS(SELECT 1 FROM tb_user WHERE name = '" + printedDocument.userName + "')" + Environment.NewLine + "BEGIN" + Environment.NewLine + " INSERT INTO tb_user(tenantId, name, alias) VALUES (1, '" + printedDocument.userName + "', '" + printedDocument.userName + "')" + Environment.NewLine + "END" + Environment.NewLine + "-- Recupera os dados do usuário" + Environment.NewLine + "DECLARE @userId INT" + Environment.NewLine + "SELECT @userId = id" + Environment.NewLine + "FROM tb_user" + Environment.NewLine + "WHERE name = '" + printedDocument.userName + "'" + Environment.NewLine + "-- Executa procedimento para garantir a existência da impresora no banco" + Environment.NewLine + "IF NOT EXISTS(SELECT 1 FROM tb_printer WHERE name = '" + printedDocument.printerName + "')" + Environment.NewLine + "BEGIN" + Environment.NewLine + " INSERT INTO tb_printer(tenantId, name, alias) VALUES (1, '" + printedDocument.printerName + "', '" + printedDocument.printerName + "')" + Environment.NewLine + "END" + Environment.NewLine + "-- Recupera os dados da impressora" + Environment.NewLine + "DECLARE @printerId INT" + Environment.NewLine + "DECLARE @pageCost MONEY" + Environment.NewLine + "DECLARE @colorCostDiff MONEY" + Environment.NewLine + "DECLARE @bwPrinter BIT" + Environment.NewLine + "SELECT @printerId = id, @pageCost = pageCost, @colorCostDiff = colorCostDiff, @bwPrinter = bwPrinter" + Environment.NewLine + "FROM tb_printer" + Environment.NewLine + "WHERE name = '" + printedDocument.printerName + "'" + Environment.NewLine + "IF (@bwPrinter = 1) -- caso a impressora esteja definida como Monocromática define a impressão como Pb" + Environment.NewLine + "BEGIN" + Environment.NewLine + " SET @color = 0" + Environment.NewLine + "END" + Environment.NewLine + "DECLARE @jobCost MONEY" + Environment.NewLine + "SET @jobCost = (@pageCost + (@colorCostDiff * @color) ) * @pageCount * @copyCount" + Environment.NewLine + "INSERT INTO" + Environment.NewLine + " tb_printLog(tenantId, jobTime, userId, printerId, documentName, pageCount, copyCount, duplex, color, jobCost)" + Environment.NewLine + "VALUES" + Environment.NewLine + " (1, '" + printedDocument.jobTime.ToString("yyyy-MM-dd hh:mm:ss") + "', @userId, @printerId, '" + printedDocument.name + "', @pageCount, @copyCount, @duplex, @color, @jobCost)"; query.Execute(false); } return(true); }