using DevExpress.Utils; using DevExpress.Web; using DevExpress.Web.ASPxThemes; using DevExpress.Web.Mvc; using DevExpress.XtraPrinting; using GreenTree.Nachtragsmanagement.Core.Domain.Deviation; using GreenTree.Nachtragsmanagement.Core.Domain.User; using GreenTree.Nachtragsmanagement.Services.Appendix; using GreenTree.Nachtragsmanagement.Services.Deviation; using GreenTree.Nachtragsmanagement.Services.Misc; using GreenTree.Nachtragsmanagement.Services.User; using GreenTree.Nachtragsmanagement.Web.Framework.Authorization; using GreenTree.Nachtragsmanagement.Web.Models.Global; using GreenTree.Nachtragsmanagement.Web.Models.Misc; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.UI; using System.Web.UI.WebControls; namespace GreenTree.Nachtragsmanagement.Web.Controllers { public class MiscController : Controller { private readonly IMiscService _miscService; private readonly IUserService _userService; private readonly INotificationService _notificationService; public MiscController( IMiscService miscService, IUserService userService, INotificationService notificationService) { _miscService = miscService; _userService = userService; _notificationService = notificationService; ViewData["AllUsers"] = _userService.GetAllUsers(); ViewData["AllUsersWithRole"] = _userService.GetAllUsers() .Select(u => new { Id = u.Id, Description = String.Format("{0} - {1}", u.Lastname, String.Join(", ", u.Roles .Select(r => r.Description))) }) .ToList(); ViewData["AllNotificationPlugins"] = _notificationService.GetNotificationPlugins(); } #region MailNotifications /// /// Basic mailNotification view function /// [FunctionAuthorize(true, "Misc-MailNotifications")] public ActionResult ViewMailNotifications() { var mailNotifications = _miscService.GetAllMailNotifications(); var mailNotificationModels = mailNotifications .Select(u => MailNotificationDataModel.FromMailNotification(u, false, _notificationService)) .ToList(); return View("~/Views/Misc/MailNotifications.cshtml", mailNotificationModels); } /// /// Get JSON data of specific mailNotification /// /// MailNotification id. public ActionResult GetMailNotification(int id = -1) { var mailNotification = _miscService.GetMailNotificationById(id); if (mailNotification == null) return new JsonResult { Data = "notFound", JsonRequestBehavior = JsonRequestBehavior.AllowGet }; var mailNotificationModel = MailNotificationDataModel.FromMailNotification(mailNotification, false, _notificationService); return new JsonResult { Data = JsonConvert.SerializeObject(mailNotificationModel), JsonRequestBehavior = JsonRequestBehavior.AllowGet }; } /// /// Callback result for mailNotification grid /// /// The height of the grid scrollable component. public ActionResult PartialMailNotifications(int scrollHeight = -1) { var mailNotifications = _miscService.GetAllMailNotifications(); var mailNotificationModels = mailNotifications .Select(u => MailNotificationDataModel.FromMailNotification(u, false, _notificationService)) .ToList(); ViewData["ScrollHeight"] = scrollHeight; return PartialView("~/Views/Misc/_MailNotificationGridPartial.cshtml", mailNotificationModels); } /// /// Callback result for mailNotification job combobox /// /// The system name of the corresponding notification plugin. public ActionResult PartialNotificationPluginJobs(string pluginSystemName) { var notificationPlugin = _notificationService.GetNotificationPlugin(pluginSystemName); if (notificationPlugin == null) return PartialView("~/Views/Misc/_MailNotificationPluginJobsPartial.cshtml", null); var mailNotificationModel = new MailNotificationDataModel { NotificationPlugin = notificationPlugin }; return PartialView("~/Views/Misc/_MailNotificationPluginJobsPartial.cshtml", mailNotificationModel); } /// /// Export result for mailNotification grid /// [HttpPost] public ActionResult ExportPartialMailNotifications(GridViewExportFormat exportformat) { if (exportformat == null || String.IsNullOrEmpty(exportformat.Format)) return new EmptyResult(); var mailNotifications = _miscService.GetAllMailNotifications(); var mailNotificationModels = mailNotifications .Select(u => MailNotificationDataModel.FromMailNotification(u, false, _notificationService)) .ToList(); var viewContext = new ViewContext(); var viewPage = new ViewPage(); var htmlHelper = new HtmlHelper(viewContext, viewPage); var gridViewSettings = Extensions.GridViewSettingsHelper.MailNotificationGridViewSettings(htmlHelper); switch (exportformat.Format.ToLower()) { case "xlsx": return GridViewExtension.ExportToXlsx(gridViewSettings, mailNotificationModels); case "xls": return GridViewExtension.ExportToXls(gridViewSettings, mailNotificationModels); case "pdf": return GridViewExtension.ExportToPdf(gridViewSettings, mailNotificationModels); default: return new EmptyResult(); } } /// /// Partial edit for editing of existing or for new mailNotification /// /// Id for existing mailNotification, otherweise -1. public ActionResult EditMailNotification(int id = -1) { var mailNotification = _miscService.GetMailNotificationById(id); var mailNotificationModel = MailNotificationDataModel.FromMailNotification(mailNotification, true, _notificationService); return PartialView("~/Views/Misc/_MailNotificationEditPartial.cshtml", mailNotificationModel); } /// /// Partial edit result if ModelState is valid, otherwise simple JSON result for success /// /// MailNotification model to be saved. [HttpPost, ValidateInput(false)] public ActionResult EditMailNotification(MailNotificationDataModel mailNotificationModel) { if (!ModelState.IsValid) { foreach (var role in mailNotificationModel.UserValues) mailNotificationModel.UserDescriptions.Add( ((IList)ViewData["AllUsers"]) .First(r => r.Id == role).Lastname); return PartialView("~/Views/Misc/_MailNotificationEditPartial.cshtml", mailNotificationModel); } var selectedUsers = _userService.GetUsersByIds(mailNotificationModel.UserValues.ToArray()); if (mailNotificationModel.Id == -1) { var mailNotification = mailNotificationModel.ToMailNotification(); mailNotification.SetUsers(selectedUsers); _miscService.InsertMailNotification(mailNotification); } else { var mailNotification = _miscService.GetMailNotificationById(mailNotificationModel.Id); mailNotification.CronExpression = mailNotificationModel.CronExpression; mailNotification.NotificationPluginSystemName = mailNotificationModel.NotificationPluginSystemName; mailNotification.NotificationJobSystemName = mailNotificationModel.NotificationJobSystemName; mailNotification.SetUsers(selectedUsers); _miscService.UpdateMailNotification(mailNotification); } return new JsonResult { Data = "success" }; } /// /// Simple JSON result for deleting a specific mailNotification /// /// MailNotification id. [HttpPost] public ActionResult DeleteMailNotification(int id) { var mailNotification = _miscService.GetMailNotificationById(id); if (mailNotification != null) _miscService.DeleteMailNotification(mailNotification); return new JsonResult { Data = "success" }; } #endregion } }