using GreenTree.Nachtragsmanagement.Core.Plugins; using GreenTree.Nachtragsmanagement.Services.Misc; using GreenTree.Nachtragsmanagement.Web.Models.Admin.User; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace GreenTree.Nachtragsmanagement.Web.Models.Misc { public class MailNotificationDataModel { public int Id { get; set; } public string CronExpression { get; set; } public string CronExpressionDescription { get; set; } public INotificationPlugin NotificationPlugin { get; set; } public string NotificationPluginSystemName { get; set; } public string NotificationPluginSystemNameDescription { get; set; } public string NotificationJobSystemName { get; set; } public string NotificationJobSystemNameDescription { get; set; } public ICollection UserValues { get; set; } public ICollection UserDescriptions { get; set; } public ICollection Users { get; set; } public string UserDescription { get { if (UserDescriptions == null) return String.Empty; else return String.Join(", ", UserDescriptions); } } public MailNotificationDataModel() { UserValues = new List(); UserDescriptions = new List(); } public static MailNotificationDataModel FromMailNotification(Core.Domain.Misc.MailNotification mailNotificationEntity, bool newWhenIsNull, INotificationService service) { if (mailNotificationEntity == null && newWhenIsNull) return new MailNotificationDataModel { Id = -1, }; if (mailNotificationEntity == null && !newWhenIsNull) throw new ArgumentNullException("mailNotificationEntity", "Cannot create MailNotificationDataModel from NULL mailNotification entity."); var notificationPlugin = service.GetNotificationPlugin(mailNotificationEntity.NotificationPluginSystemName); var notificationDataModel = new MailNotificationDataModel { Id = mailNotificationEntity.Id, CronExpression = mailNotificationEntity.CronExpression, NotificationPlugin = notificationPlugin, NotificationPluginSystemName = mailNotificationEntity.NotificationPluginSystemName, NotificationJobSystemName = mailNotificationEntity.NotificationJobSystemName, UserValues = mailNotificationEntity.Users .Select(r => r.Id) .ToList(), UserDescriptions = mailNotificationEntity.Users .Select(r => String.Format("{0} - ({1})", r.Lastname, String.Join(", ", r.Roles.Select(u => u.Description)))) .ToList(), Users = mailNotificationEntity.Users .Select(r => UserDataModel.FromUser(r, false)) .ToList(), }; notificationDataModel.NotificationPluginSystemNameDescription = notificationPlugin == null ? String.Empty : notificationPlugin.Name; notificationDataModel.NotificationJobSystemNameDescription = notificationPlugin == null ? String.Empty : notificationPlugin.AvailableNotificationJobs .Any(j => j.SystemName == notificationDataModel.NotificationJobSystemName) ? notificationPlugin.AvailableNotificationJobs .First(j => j.SystemName == notificationDataModel.NotificationJobSystemName).Name : String.Empty; return notificationDataModel; } public Core.Domain.Misc.MailNotification ToMailNotification() { return new Core.Domain.Misc.MailNotification { Id = this.Id, CronExpression = this.CronExpression, NotificationPluginSystemName = this.NotificationPluginSystemName, NotificationJobSystemName = this.NotificationJobSystemName }; } } }