/// <summary> /// Encapsula a chamada ao gerador de relatórios, decide qual classe de relatório utilizar /// </summary> private void BuildReport(String reportFilename, ReportTypeEnum reportType, ReportFrequencyEnum reportFrequency) { FileInfo reportFile = new FileInfo(reportFilename); DateRange dateRange = ReportContext.GetDateRange(reportFrequency); // Usa a classe base dos relatórios para obter o nome completo da classe incluindo dll/assembly String qualifiedName = typeof(AbstractReport).AssemblyQualifiedName; qualifiedName = qualifiedName.Replace("AbstractReport", reportType.ToString()); Type reportClass = Type.GetType(qualifiedName); // Monta os parâmetros do relatório e cria uma instância da classe de relatório ArgumentBuilder argumentBuilder = new ArgumentBuilder(); argumentBuilder.Add("tenantId", currentTenant.ToString()); argumentBuilder.Add("startDate", dateRange.GetFirstDay().ToString()); argumentBuilder.Add("endDate", dateRange.GetLastDay().ToString()); AbstractReport report = (AbstractReport)Activator.CreateInstance(reportClass, argumentBuilder.GetArguments(reportClass)); // Caso não seja nenhum dos relatórios implementados aborta if ((reportClass == null) || (report == null)) { return; } // Gera o relatório report.InitializeComponents(reportFile, currentReportBuilder, dataAccess.GetConnection()); report.BuildReport(); }
private void ProcessMailing(MailingDAO mailingDAO, Mailing mailing) { SmtpServerDAO smtpServerDAO = new SmtpServerDAO(dataAccess.GetConnection()); SmtpServer smtpServer = smtpServerDAO.GetSmtpServer(currentTenant, mailing.smtpServer); ReportFrequencyEnum reportFrequency = (ReportFrequencyEnum)mailing.frequency; ReportTypeEnum reportType = (ReportTypeEnum)mailing.reportType; String recipients = mailing.recipients; DateTime lastSend = mailing.lastSend; // Verifica se está na data de envio, aborta caso não esteja if (!ReportContext.IsScheduledTime(reportFrequency, currentPeriodEndDate)) { return; } // Verifica se o log foi importado PrintLogPersistence logPersistence = new PrintLogPersistence(currentTenant, dataAccess.GetConnection(), null, false); Boolean logImported = logPersistence.FileImported(ReportContext.GetDateRange(reportFrequency)); // Verifica se o relatório já foi enviado hoje Boolean alreadySent = lastSend.Date == DateTime.Now.Date; // Caso o log tenha sido importado e se ainda não enviou, gera o relatório e envia if ((logImported) && (!alreadySent)) { // Inicia o append no arquivo de log (acrescentando o "startingDelimiter") fileLogger.LogInfo("Envio de relatório - Iniciando execução...", true); // Informa dados do mailing fileLogger.LogInfo("Frequência de envio - reportFrequency = " + reportFrequency.ToString()); fileLogger.LogInfo("Relatório - reportType = " + reportType.ToString()); fileLogger.LogInfo("Destinatários - recipients = " + recipients); notifications.Clear(); String reportStamp = DateTime.Now.Ticks.ToString(); String reportFilename = FileResource.MapDesktopResource("Report" + reportStamp + currentFormatExtension); BuildReport(reportFilename, reportType, reportFrequency); String mailSubject = "Relatório " + ReportContext.GetFrequencyCaption(reportFrequency); List <String> attachmentFiles = new List <String>(); attachmentFiles.Add(reportFilename); MailSender mailSender = new MailSender(smtpServer.CreateSysObject(), this); mailSender.SetContents("Email gerado automaticamente, não responder.", attachmentFiles); Boolean success = mailSender.SendMail(mailSubject, currentSysSender, recipients); ProcessNotifications(); if (success) // Grava a data de envio de envio no banco { mailing.lastSend = DateTime.Now.Date; mailingDAO.SetMailing(mailing); fileLogger.LogInfo("Execução concluída."); } } // Tenta remover arquivos temporários, ignora caso os arquivos estejam em uso // tentará novamente nas próximas execuções ReportContext.TryRemoveTempFiles(); }
public async Task <string> ExportToExcel(ReportTypeEnum reportType, List <string> reportHeaders, IEnumerable <object> data) { var headers = reportHeaders.ToArray(); var excel = new XSSFWorkbook(); var worksheet = excel.CreateSheet(reportType.ToString()); var date = DateTime.UtcNow.ToString("MMddyyyy"); var time = DateTime.Now.ToString("hmmss.ffff"); var fileName = $"{reportType}-{date}-{time}.xlsx"; var fileReference = await _blob.GetAppendBlobReference(fileName); SetHeaders(headers, worksheet); SetValues(data, headers, worksheet); using (Stream stream = await fileReference.OpenWriteAsync(true)) { excel.Write(stream); } return(fileName); }
protected void Page_Load(object sender, EventArgs e) { accountingMasterPage = (AccountingMasterPage)Page.Master; accountingMasterPage.InitializeMasterPageComponents(); dataAccess = accountingMasterPage.dataAccess; // action: // null - Sem ação, apenas lista os mailings // 0 - Excluir mailing, lista os restantes // 1 - Teste execução do mailing int?action = null; int?mailingId = null; try { if (!String.IsNullOrEmpty(Request.QueryString["action"])) { action = int.Parse(Request.QueryString["action"]); } if (!String.IsNullOrEmpty(Request.QueryString["mailingId"])) { mailingId = int.Parse(Request.QueryString["mailingId"]); } } catch (System.FormatException) { // Remove todos os controles da página configurationArea.Controls.Clear(); controlArea.Controls.Clear(); // Mostra aviso de inconsistência nos parâmetros WarningMessage.Show(controlArea, ArgumentBuilder.GetWarning()); return; } Tenant tenant = (Tenant)Session["tenant"]; mailingDAO = new MailingDAO(dataAccess.GetConnection()); if (mailingId != null) { switch (action) { case 0: mailingDAO.RemoveMailing(mailingId.Value); Response.Redirect("ConfigMailing.aspx"); // Limpa a QueryString para evitar erros break; case 1: Mailing mailing = mailingDAO.GetMailing(tenant.id, mailingId); TestMailing(mailing); break; default: break; } } List <Object> mailingList = mailingDAO.GetAllMailings(tenant.id); String[] columnNames = new String[] { "Frequência de envio", "Relatório", "Destinatários" }; //String testScript = "window.location='ConfigMailing.aspx?action=1&mailingId=' + {0};"; String alterScript = "window.open('MailingSettings.aspx?mailingId=' + {0}, 'Settings', 'width=540,height=600');"; String removeScript = "var confirmed = confirm('Deseja realmente excluir este item?'); if (confirmed) window.location='ConfigMailing.aspx?action=0&mailingId=' + {0};"; EditableListButton[] buttons = new EditableListButton[] { // Botões que devem aparecer para os items da lista //new EditableListButton("Testar", testScript, ButtonTypeEnum.Execute), new EditableListButton("Editar", alterScript, ButtonTypeEnum.Edit), new EditableListButton("Excluir", removeScript, ButtonTypeEnum.Remove) }; EditableList editableList = new EditableList(configurationArea, columnNames, buttons); foreach (Mailing mailing in mailingList) { ReportFrequencyEnum frequency = (ReportFrequencyEnum)mailing.frequency; ReportTypeEnum reportType = (ReportTypeEnum)mailing.reportType; String[] mailingProperties = new String[] { AssociatedText.GetFieldDescription(typeof(ReportFrequencyEnum), frequency.ToString()), AssociatedText.GetFieldDescription(typeof(ReportTypeEnum), reportType.ToString()), mailing.recipients }; // A lista de mailings não possui item default, isDefaultItem é sempre "false" editableList.InsertItem(mailing.id, false, mailingProperties); } editableList.DrawList(); // O clique do botão chama o script de alteração passando "id = 0", a tela de alteração // interpreta "id = 0" como "criar um novo", o id é então gerado no banco de dados. btnNovo.Attributes.Add("onClick", String.Format(alterScript, 0)); }