public void SendReport(string[] files, ReportExecuteLog log) { var mails = Contacts; #if TESTING mails = new[] { Settings.Default.ErrorReportMail }; #endif if (MailPerFile) { foreach (var file in files) { foreach (var mail in mails) { MailWithAttach(log, mail, new[] { file }, _mailMetaOverride.GetValueOrDefault(Path.GetFileNameWithoutExtension(file))); } } } else { foreach (var mail in mails) { MailWithAttach(log, mail, files); } } Connection.Execute("delete FROM reports.Mailing_Addresses where GeneralReport = ?GeneralReport", new { GeneralReport = Id }); }
public void Send_ready_report() { var payer = new TestPayer("Тестовый плательщик"); session.Save(payer); var report = new GeneralReport(session.Load <Payer>(payer.Id)); session.Save(report); report.LastSuccess = DateTime.Now; var executelog = new ReportExecuteLog(report); session.Save(executelog); session.Save(new ReportLog(report, executelog)); session.Flush(); executelog.BuildTestFile(); Open($"/Reports/schedule.aspx?r={report.Id}"); var radio = browser.FindElementsByCssSelector("input[type=\"radio\"]").First(x => x.GetAttribute("Value") == "RadioMails"); radio.Click(); browser.FindElementById("mail_Text").Clear(); Click("Выслать готовый"); AssertText("Укажите получателя отчета !"); browser.FindElementById("mail_Text").SendKeys("*****@*****.**"); Click("Выслать готовый"); AssertText("Файл отчета успешно отправлен"); }
public void Process_reports() { TestOrder.CreateSimple(session); var id = session.CreateSQLQuery(@" INSERT INTO reports.general_reports(Allow) values (1); select LAST_INSERT_ID() as id; ").UniqueResult(); session.CreateSQLQuery(@" INSERT INTO reports.reports SET ReportCaption = 'test', ReportTypeCode = :typeId, GeneralReportCode = :id, Enabled = 1;" ) .SetParameter("id", id) .SetParameter("typeId", 9) .ExecuteUpdate(); var logs = new ReportExecuteLog(); session.Save(logs); FlushAndCommit(); var report = session.Load <GeneralReport>(Convert.ToUInt32(id)); report.ProcessReports(logs, (MySqlConnection)session.Connection, true, DateTime.Today.AddDays(-2), DateTime.Today); }
private void Historify(string[] files, ReportExecuteLog log) { if (files.Length == 1) { var reportFile = files[0]; var historyFile = Path.Combine(Settings.Default.HistoryPath, log.Id + Path.GetExtension(reportFile)); File.Copy(reportFile, historyFile); } else { var historyFile = Path.Combine(Settings.Default.HistoryPath, log.Id + ".zip"); WithTempArchive(WorkDir, f => File.Copy(f, historyFile)); } }
private void MailWithAttach(ReportExecuteLog log, string address, string[] files, string subjectSufix = null) { var message = new Mime(); var mainEntry = message.MainEntity; mainEntry.From = new AddressList { new MailboxAddress("АналитФармация", "*****@*****.**") }; mainEntry.To = new AddressList(); mainEntry.To.Parse(address); if (!string.IsNullOrEmpty(EMailSubject)) { mainEntry.Subject = EMailSubject; } if (!String.IsNullOrEmpty(subjectSufix)) { if (!String.IsNullOrEmpty(mainEntry.Subject)) { mainEntry.Subject += " "; } mainEntry.Subject += subjectSufix; } mainEntry.ContentType = MediaType_enum.Multipart_mixed; var textEntity = mainEntry.ChildEntities.Add(); textEntity.ContentType = MediaType_enum.Text_plain; textEntity.ContentTransferEncoding = ContentTransferEncoding_enum.QuotedPrintable; textEntity.DataText = String.Empty; foreach (var file in files) { AttachFile(mainEntry, file); } if (Testing) { Messages.Add(message); } else { var smtpId = SmtpClientEx.QuickSendSmartHostSMTPID(Settings.Default.SMTPHost, null, null, message); ProcessLog(smtpId, message.MainEntity.MessageID, address, log); } }
private void ProcessLog(int?smtpId, string messageId, string email, ReportExecuteLog log) { var adapter = new MySqlDataAdapter("", Connection); adapter.SelectCommand.CommandText = @"insert into logs.reportslogs (LogTime, GeneralReportCode, SMTPID, MessageID, EMail, ResultId) values (NOW(), ?GeneralReportCode, ?SMTPID, ?MessageID, ?EMail, ?ResultId)"; var parameters = adapter.SelectCommand.Parameters; parameters.AddWithValue("?GeneralReportCode", Id); parameters.AddWithValue("?SMTPID", smtpId); parameters.AddWithValue("?MessageID", messageId); parameters.AddWithValue("?EMail", email); parameters.AddWithValue("?ResultId", log.Id); adapter.SelectCommand.ExecuteNonQuery(); }
//Производится построение отчетов public void ProcessReports(ReportExecuteLog log, MySqlConnection connection, bool interval, DateTime begin, DateTime end, bool load = true) { Connection = connection; try { if (load) { Load(interval, begin, end); } var files = ArchFile(BuildResultFile()); SafeCopyFileToFtp(files); SendReport(files, log); Historify(files, log); LogSuccess(); } finally { Clean(); } }
public void Resend_report() { Global.Config.ReportHistoryPath = Path.Combine(ScheduleHelper.ScheduleWorkDir, "History"); var payer = new Payer("Тестовый плательщик"); var report1 = new GeneralReport(payer); var report2 = new GeneralReport(payer); session.Save(payer); session.Save(report1); session.Save(report2); var log1 = new ReportExecuteLog(report1); session.Save(log1); session.Save(new ReportLog(report1, log1) { LogTime = DateTime.Now.AddDays(-2) }); var log2 = new ReportExecuteLog(report2); session.Save(log2); session.Save(new ReportLog(report2, log2)); session.Flush(); var content = log1.BuildTestFile(); log2.BuildTestFile(); report1.UnderTest = true; report1.ResendReport(session, new List <string> { "*****@*****.**" }); var message = report1.Messages[0]; var sendedContent = new StreamReader(message.Attachments[0].ContentStream).ReadToEnd(); Assert.That(sendedContent, Is.EqualTo(content)); }
public static bool ProcessReport(int generalReportId, bool manual, bool interval, DateTime dtFrom, DateTime dtTo) { var result = false; var reportLog = new ReportExecuteLog(); GeneralReport report = null; using (var session = GeneralReport.Factory.OpenSession()) using (var mc = new MySqlConnection(ConnectionHelper.GetConnectionString())) { mc.Open(); try { var timeout = ConfigurationManager.AppSettings["MySqlTimeout"]; if (!String.IsNullOrEmpty(timeout)) { mc.Execute($"set interactive_timeout={timeout};set wait_timeout={timeout};"); } using (var trx = session.BeginTransaction()) { reportLog.GeneralReportCode = generalReportId; reportLog.StartTime = DateTime.Now; session.Save(reportLog); trx.Commit(); } report = session.Get <GeneralReport>((uint)generalReportId); if (report == null) { throw new Exception($"Отчет с кодом {generalReportId} не существует."); } if (!report.Enabled && !manual) { throw new ReportException("Невозможно выполнить отчет, т.к. отчет выключен."); } _log.DebugFormat("Запуск отчета {0}", report.Id); report.ProcessReports(reportLog, mc, interval, dtFrom, dtTo); _log.DebugFormat("Отчет {0} выполнился успешно", report.Id); using (var trx = session.BeginTransaction()) { reportLog.EndTime = DateTime.Now; trx.Commit(); } result = true; } catch (Exception e) { if (e is ReportException) { _log.Warn($"Ошибка при выполнении отчета {report}", e); } else { _log.Error($"Ошибка при выполнении отчета {report}", e); } try { using (var trx = session.BeginTransaction()) { reportLog.EndError = true; session.Save(reportLog); trx.Commit(); } } catch (Exception ex) { _log.Error("Не удалось запротоколировать ошибку", ex); } var reportEx = e as ReportException; if (reportEx != null) { Mailer.MailReportErr(reportEx.ToString(), reportEx.Payer, report.Id, reportEx.SubreportCode, reportEx.ReportCaption); result = true; } else { Mailer.MailGeneralReportErr(report, e); } } finally { //не уверен почему так но восстанавливаем состояние задачи только если отчет не выключен //этого требует тест ProgramTest но логика мне не понятна //подозрительно тк раньше это работало тк переменная была null и блок валился с исключением if (report != null && report.Enabled) { ScheduleHelper.SetTaskAction(report.Id, "/gr:" + report.Id); ScheduleHelper.SetTaskEnableStatus(report.Id, report.Enabled, "GR"); var taskService = ScheduleHelper.GetService(); var reportsFolder = ScheduleHelper.GetReportsFolder(taskService); ScheduleHelper.DeleteTask(reportsFolder, report.Id, "temp_"); } } return(result); } }