// Ошибка при формировании отчета, пользователю и расширенное сотрудникам
 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));
        }
Ejemplo n.º 4
0
        /// <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);
 }