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("Файл отчета успешно отправлен");
        }
Exemple #3
0
        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);
                }
        }