コード例 #1
0
        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);
        }
コード例 #2
0
        // 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);
            }
        }
コード例 #3
0
 /// <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();
     }
 }
コード例 #4
0
        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);
        }
コード例 #5
0
        public IActionResult GetPrintings([FromRoute] string name)
        {
            PrintedDocument doc = PrintingRepository.CheckPrintRequestStatus(name);

            if (doc != null)
            {
                return(Json(doc));
            }
            return(StatusCode(404, "Not Found"));
        }
コード例 #6
0
        /// <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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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();
        }
コード例 #9
0
        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);
        }
コード例 #10
0
        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);
        }
コード例 #11
0
        // 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);
        }
コード例 #12
0
        // 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);
            }
        }
コード例 #13
0
        /// <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);
        }