コード例 #1
0
        /// <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);
        }
コード例 #2
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)
            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();
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
        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);
        }