// Ошибка при формировании отчета, пользователю и расширенное сотрудникам public void SendReportErrorMessage(jobextend jext, string errorMessage) { diagnostics.ErrorMessage = errorMessage; MessageForReport(jext, new List <string> { currentUser.Login }, MailType.ReportError); }
private void MessageForReport(jobextend jext, List <string> mailTo, MailType type) { var creator = db.Account.Single(x => x.Id == jext.CreatorId); var producerName = db.producernames.FirstOrDefault(x => x.ProducerId == jext.ProducerId)?.ProducerName; var args = new { ReportName = jext.CustomName, CreatorName = creator.Name, ProducerName = producerName, DateTimeNow = jext.LastRun, UserName = currentUser.Name, UserLogin = currentUser.Login }; diagnostics.ReportId = jext.JobName; diagnostics.ReportName = jext.CustomName; diagnostics.ProducerId = jext.ProducerId; diagnostics.ProducerName = producerName; MessageFromTemplate(type, mailTo, args); }
public FileInfo GetExcel(jobextend jext) { var key = JobKey.Create(jext.JobName, jext.JobGroup); var scheduler = GetScheduler(); // нашли задачу var job = scheduler.GetJobDetail(key); var param = (Report)job.JobDataMap["param"]; var jxml = db.reportxml.Single(x => x.JobName == jext.JobName); // вытащили сохраненный отчет var ds = new DataSet(); ds.ReadXml(new StringReader(jxml.Xml), XmlReadMode.ReadSchema); // создали процессор для этого типа отчетов var processor = param.GetProcessor(); // создали excel-файл return(processor.CreateExcel(jext.JobGroup, jext.JobName, ds, param)); }
/// <summary> /// Возвращает форму указанного типа для заполнения параметров отчета, проверяет их, сохраняет задание в шедулере Quartz /// </summary> /// <param name="Id">Идентификатор типа отчета</param> /// <returns></returns> public ActionResult AddJob(int?Id) { if (!Id.HasValue) { ErrorMessage("Выберите тип отчета"); return(RedirectToAction("Index", "Report")); } // получили пустую модель нужного типа var type = helper.GetModelType(Id.Value); var model = (Report)Activator.CreateInstance(type); model.Id = Id.Value; model.Init(CurrentUser); // при GET - отправили её пользователю на заполнение if (HttpContext.Request.HttpMethod == "GET") { SetViewData(model); return(View(model)); } // при POST - биндим Bind(model, type); foreach (var error in model.Validate()) { ModelState.AddModelError(error.PropertyName, error.Message); } // если модель невалидна - возвращаем пользователю if (!ModelState.IsValid) { SetViewData(model); return(View(model)); } var scheduler = helper.GetScheduler(); string group; if (CurrentUser.IsProducer) { group = $"p{CurrentUser.AccountCompany.ProducerId}"; } else { group = $"u{CurrentUser.Id}"; } var key = new JobKey(Guid.NewGuid().ToString(), group); var job = JobBuilder.Create <ReportJob>() .WithIdentity(key) .StoreDurably() .WithDescription(model.ToString()) .Build(); job.JobDataMap["param"] = model; try { scheduler.AddJob(job, true); } catch (Exception e) { logger.Error("Ошибка при добавлении отчета", e); ErrorMessage("Непредвиденная ошибка при добавлении отчета"); return(RedirectToAction("Index", "Report")); } // иначе - успех var jext = new jobextend(CurrentUser) { CustomName = model.CastomName, JobGroup = key.Group, JobName = key.Name, ReportType = model.Id, SchedName = scheduler.SchedulerName, Scheduler = "Время формирования не задано" }; DB.jobextend.Add(jext); DB.SaveChanges(CurrentUser, "Добавление отчета"); SuccessMessage("Отчет успешно добавлен"); return(RedirectToAction("Index", "Report")); }
// Нет данных для формировании отчета, пользователю и расширенное сотрудникам public void SendEmptyReportMessage(jobextend jext) { MessageForReport(jext, new List <string> { currentUser.Login }, MailType.EmptyReport); }
// Ручная рассылка отчетов, пользователю и расширенное сотрудникам public void ManualPostReportMessage(jobextend jext, string path, List <string> mailTo) { attachments.Add(path); MessageForReport(jext, mailTo, MailType.ManualPostReport); }