_MailNotificationEditPartial.cshtml 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. @using GreenTree.Nachtragsmanagement.Web.Extensions
  2. @using GreenTree.Nachtragsmanagement.Core.Plugins
  3. @{
  4. var userContext = GreenTree.Nachtragsmanagement.Core.CommonHelper.UserContext();
  5. }
  6. @model GreenTree.Nachtragsmanagement.Web.Models.Misc.MailNotificationDataModel
  7. <div class="mailNotificationEditContainer">
  8. <script src="~/Scripts/jquery-cron-min.js"></script>
  9. <script>
  10. var textSeparator = ", ";
  11. var pluginSystemName = "@Model.NotificationPluginSystemName";
  12. var cronEditor = null;
  13. var notificationPluginDictionary = {};
  14. var notificationJobDictionary = {};
  15. @foreach (var notificationPlugin in (IEnumerable<INotificationPlugin>)ViewData["AllNotificationPlugins"])
  16. {
  17. ViewContext.Writer.WriteLine("notificationPluginDictionary[\"" + notificationPlugin.SystemName + "\"] = \"" + notificationPlugin.Description + "\";");
  18. foreach (var notificationJob in notificationPlugin.AvailableNotificationJobs)
  19. {
  20. ViewContext.Writer.WriteLine("notificationJobDictionary[\"" + notificationJob.SystemName + "\"] = \"" + notificationJob.Description + "\";");
  21. }
  22. }
  23. //cronEditor = $("#cronExpressionEditor").cron({
  24. // onChange: function () {
  25. // $("#CronExpression").val($(this).cron("value"));
  26. // $("#cronExpressionDisplay").text($(this).cron("value"));
  27. // }
  28. //});
  29. function changeElementText(selector, textArray) {
  30. for (var i = 0; i < textArray.length; i++) {
  31. $(selector).contents().filter(function () {
  32. return this.nodeType == 3;
  33. })[i].nodeValue = textArray[i];
  34. }
  35. }
  36. @*$(document).ready(function () {
  37. @if (String.IsNullOrEmpty(Model.CronExpression))
  38. {
  39. ViewContext.Writer.WriteLine("cronEditor.cron('value', '0 6 * * 1');");
  40. }
  41. else
  42. {
  43. ViewContext.Writer.WriteLine("cronEditor.cron('value', '" + Model.CronExpression + "');");
  44. }
  45. changeElementText(".cron-period", ["Jede(r/s) "]);
  46. changeElementText(".cron-block-mins", ["auf der ", " Minute nach der Stunde"]);
  47. changeElementText(".cron-block-time", ["um "]);
  48. changeElementText(".cron-block-dow", ["am "]);
  49. changeElementText(".cron-block-dom", ["am "]);
  50. changeElementText(".cron-block-month", [" des "]);
  51. $('select[name="cron-period"] > option[value="minute"]').text("Minute");
  52. $('select[name="cron-period"] > option[value="hour"]').text("Stunde");
  53. $('select[name="cron-period"] > option[value="day"]').text("Tag");
  54. $('select[name="cron-period"] > option[value="week"]').text("Woche");
  55. $('select[name="cron-period"] > option[value="month"]').text("Monat");
  56. $('select[name="cron-period"] > option[value="year"]').text("Jahr");
  57. $('select[name="cron-dow"] > option[value="0"]').text("Sonntag");
  58. $('select[name="cron-dow"] > option[value="1"]').text("Montag");
  59. $('select[name="cron-dow"] > option[value="2"]').text("Dienstag");
  60. $('select[name="cron-dow"] > option[value="3"]').text("Mittwoch");
  61. $('select[name="cron-dow"] > option[value="4"]').text("Donnerstag");
  62. $('select[name="cron-dow"] > option[value="5"]').text("Freitag");
  63. $('select[name="cron-dow"] > option[value="6"]').text("Samstag");
  64. $('select[name="cron-month"] > option[value="1"]').text("Januar");
  65. $('select[name="cron-month"] > option[value="2"]').text("Februar");
  66. $('select[name="cron-month"] > option[value="3"]').text("März");
  67. $('select[name="cron-month"] > option[value="4"]').text("April");
  68. $('select[name="cron-month"] > option[value="5"]').text("Mai");
  69. $('select[name="cron-month"] > option[value="6"]').text("Juni");
  70. $('select[name="cron-month"] > option[value="7"]').text("Juli");
  71. $('select[name="cron-month"] > option[value="8"]').text("August");
  72. $('select[name="cron-month"] > option[value="9"]').text("September");
  73. $('select[name="cron-month"] > option[value="10"]').text("Oktober");
  74. $('select[name="cron-month"] > option[value="11"]').text("November");
  75. $('select[name="cron-month"] > option[value="12"]').text("Dezember");
  76. for (var i = 1; i <= 31; i++) {
  77. $('select[name="cron-dom"] > option[value="' + i + '"]').text(i + ".");
  78. }
  79. });*@
  80. function saveMailNotification() {
  81. $("#CronExpression").val(generateCronExpression("devRecurrenceFormCron"));
  82. var form = $("#mailNotificationEditForm");
  83. $(form).submit(function (e) {
  84. $.ajax({
  85. type: "POST",
  86. url: '@Url.Action("EditMailNotification", "Misc")',
  87. data: form.serialize(),
  88. success: function (response) {
  89. setTimeout(function () {
  90. $(".mailNotificationEditContainer").remove();
  91. if (response == "success") {
  92. devGridViewMailNotifications.PerformCallback();
  93. } else {
  94. $("body").append(response);
  95. }
  96. }, 200);
  97. }
  98. });
  99. e.preventDefault();
  100. });
  101. form.submit();
  102. }
  103. function onListBoxSelectionChanged(s, e) {
  104. updateText();
  105. }
  106. function updateText() {
  107. var selectedItems = UserValues.GetSelectedItems();
  108. devDropDownListUserValues.SetText(getSelectedItemsText(selectedItems));
  109. }
  110. function synchronizeListBoxValues(s, e) {
  111. UserValues.UnselectAll();
  112. var texts = s.GetText().split(textSeparator);
  113. var values = getValuesByTexts(texts);
  114. UserValues.SelectValues(values);
  115. updateText();
  116. }
  117. function getSelectedItemsText(items) {
  118. var texts = [];
  119. for (var i = 0; i < items.length; i++)
  120. texts.push(items[i].text);
  121. return texts.join(textSeparator);
  122. }
  123. function getValuesByTexts(texts) {
  124. var actualValues = [];
  125. var item;
  126. for (var i = 0; i < texts.length; i++) {
  127. item = UserValues.FindItemByText(texts[i]);
  128. if (item != null)
  129. actualValues.push(item.value);
  130. }
  131. return actualValues;
  132. }
  133. function onNotificationPluginSelectedIndexChanged() {
  134. pluginSystemName = NotificationPluginSystemName.GetValue();
  135. NotificationJobSystemName.PerformCallback();
  136. $("#notificationPluginDescription").text(notificationPluginDictionary[pluginSystemName]);
  137. }
  138. function onNotificationJobSelectedIndexChanged() {
  139. var jobSystemName = NotificationJobSystemName.GetValue();
  140. $("#notificationJobDescription").text(notificationJobDictionary[jobSystemName]);
  141. }
  142. </script>
  143. <style>
  144. .notificationDescription {
  145. margin-top: 8px;
  146. color: #009688;
  147. font-style: italic;
  148. }
  149. #cronExpressionEditor {
  150. margin-top: 3px;
  151. padding-top: 10px;
  152. border-top: 1px solid #009688;
  153. }
  154. #cronExpressionEditor select {
  155. padding: 6px 4px;
  156. border: 1px solid #DCDCDC;
  157. border-radius: 2px;
  158. -webkit-border-radius: 2px;
  159. -moz-border-radius: 2px;
  160. -o-border-radius: 2px;
  161. -khtml-border-radius: 2px;
  162. }
  163. #cronExpressionEditor select:focus {
  164. border: 1px solid #009688;
  165. }
  166. </style>
  167. @Html.DevExpress().PopupControl(s =>
  168. {
  169. s.Name = "devPopupControlEditMailNotification";
  170. if (Model.Id == -1)
  171. s.HeaderText = "Neue Benachrichtigung erstellen";
  172. else
  173. s.HeaderText = "\"" + Model.NotificationPluginSystemNameDescription + "\" bearbeiten";
  174. s.Modal = true;
  175. s.Width = new Unit(800, UnitType.Pixel);
  176. s.CloseAction = CloseAction.CloseButton;
  177. s.PopupHorizontalAlign = PopupHorizontalAlign.WindowCenter;
  178. s.PopupVerticalAlign = PopupVerticalAlign.TopSides;
  179. s.PopupVerticalOffset = 10;
  180. s.AllowDragging = true;
  181. s.AllowResize = false;
  182. s.ShowMaximizeButton = false;
  183. s.ShowFooter = false;
  184. s.ShowOnPageLoad = true;
  185. s.SetContent(() =>
  186. {
  187. using (Html.BeginForm("EditMailNotification", "Misc", FormMethod.Post, new { id = "mailNotificationEditForm" }))
  188. {
  189. ViewContext.Writer.Write("<div class='editFormWrapper'>");
  190. ViewContext.Writer.Write("<input type=\"hidden\" value=\"" + Model.Id + "\" id=\"Id\" name=\"Id\" />");
  191. ViewContext.Writer.Write("<input type=\"hidden\" value=\"" + Model.CronExpression + "\" id=\"CronExpression\" name=\"CronExpression\" />");
  192. ViewContext.Writer.Write("<div class='inlineModelPropertyContainer'>");
  193. {
  194. ViewContext.Writer.Write("<div class='inlineModelProperty' style='width: 50%'>");
  195. {
  196. ViewContext.Writer.Write(Html.CustomLabelFor(m => m.NotificationPluginSystemName, "Benachrichtigungs-Plugin:"));
  197. ViewContext.Writer.Write(Html.ValidationMessageFor(m => m.NotificationPluginSystemName).ToHtmlString());
  198. Html.DevExpress().ComboBoxFor(m => m.NotificationPluginSystemName, t =>
  199. {
  200. t.Width = new Unit(100, UnitType.Percentage);
  201. t.Properties.ValueField = "SystemName";
  202. t.Properties.ValueType = typeof(string);
  203. t.Properties.TextField = "Name";
  204. t.Properties.ClientSideEvents.SelectedIndexChanged = "function (s, e) { onNotificationPluginSelectedIndexChanged(); }";
  205. }).BindList(ViewData["AllNotificationPlugins"]).Bind(Model.NotificationPluginSystemName).Render();
  206. }
  207. ViewContext.Writer.Write("</div>");
  208. }
  209. ViewContext.Writer.Write("</div>");
  210. ViewContext.Writer.Write("<div class='inlineModelPropertyContainer'>");
  211. {
  212. ViewContext.Writer.Write("<div class='inlineModelProperty' style='width: 100%'>");
  213. {
  214. if (Model == null || (Model != null && Model.NotificationPlugin == null))
  215. ViewContext.Writer.Write("<div id=\"notificationPluginDescription\" class=\"notificationDescription\"></div>");
  216. else
  217. ViewContext.Writer.Write(
  218. "<div id=\"notificationPluginDescription\" class=\"notificationDescription\">" + Model.NotificationPlugin.Description + "</div>");
  219. }
  220. ViewContext.Writer.Write("</div>");
  221. }
  222. ViewContext.Writer.Write("</div>");
  223. ViewContext.Writer.Write("<div class='inlineModelPropertyContainer'>");
  224. {
  225. ViewContext.Writer.Write("<div class='inlineModelProperty' style='width: 50%'>");
  226. {
  227. ViewContext.Writer.Write(Html.CustomLabelFor(m => m.NotificationJobSystemName, "Benachrichtigungs-Job:"));
  228. ViewContext.Writer.Write(Html.ValidationMessageFor(m => m.NotificationJobSystemName).ToHtmlString());
  229. ViewContext.Writer.Write(Html.Partial("~/Views/Misc/_MailNotificationPluginJobsPartial.cshtml", Model).ToHtmlString());
  230. }
  231. ViewContext.Writer.Write("</div>");
  232. }
  233. ViewContext.Writer.Write("</div>");
  234. ViewContext.Writer.Write("<div class='inlineModelPropertyContainer'>");
  235. {
  236. ViewContext.Writer.Write("<div class='inlineModelProperty' style='width: 100%'>");
  237. {
  238. if (Model == null || (Model != null && Model.NotificationPlugin == null))
  239. ViewContext.Writer.Write("<div id=\"notificationJobDescription\" class=\"notificationDescription\"></div>");
  240. else
  241. {
  242. var notificationJob = Model.NotificationPlugin.AvailableNotificationJobs
  243. .FirstOrDefault(j => j.SystemName == Model.NotificationJobSystemName);
  244. if (notificationJob != null)
  245. ViewContext.Writer.Write(
  246. "<div id=\"notificationJobDescription\" class=\"notificationDescription\">" + notificationJob.Description + "</div>");
  247. }
  248. }
  249. ViewContext.Writer.Write("</div>");
  250. }
  251. ViewContext.Writer.Write("</div>");
  252. ViewContext.Writer.Write("<div class='inlineModelPropertyContainer'>");
  253. {
  254. ViewContext.Writer.Write("<div class='inlineModelProperty' style='width: 65%'>");
  255. {
  256. ViewContext.Writer.Write(Html.CustomLabelFor(m => m.UserValues, "Benutzer:"));
  257. ViewContext.Writer.Write(Html.ValidationMessageFor(m => m.UserValues).ToHtmlString());
  258. Html.DevExpress().DropDownEdit(t =>
  259. {
  260. t.Name = "devDropDownListUserValues";
  261. t.Width = new Unit(100, UnitType.Percentage);
  262. t.Text = Model.UserDescription;
  263. t.SetDropDownWindowTemplateContent(l =>
  264. {
  265. Html.DevExpress().ListBox(lb =>
  266. {
  267. lb.Name = "UserValues";
  268. lb.Width = new Unit(100, UnitType.Percentage);
  269. lb.Height = new Unit(250, UnitType.Pixel);
  270. lb.Properties.TextField = "Description";
  271. lb.Properties.ValueField = "Id";
  272. lb.Properties.ValueType = typeof(int);
  273. lb.Properties.SelectionMode = ListEditSelectionMode.CheckColumn;
  274. lb.ControlStyle.Border.BorderStyle = BorderStyle.None;
  275. lb.PreRender = (sender, e) =>
  276. {
  277. var listBox = sender as MVCxListBox;
  278. foreach (ListEditItem listItem in listBox.Items)
  279. {
  280. if (Model.UserValues == null || !Model.UserValues.Any(m => m == (int)listItem.Value)) continue;
  281. listItem.Selected = true;
  282. }
  283. };
  284. lb.Properties.ClientSideEvents.SelectedIndexChanged = "function (s, e) { onListBoxSelectionChanged(s, e); }";
  285. }).BindList(ViewData["AllUsersWithRole"]).Render();
  286. t.Properties.ClientSideEvents.TextChanged = "function (s, e) { synchronizeListBoxValues(s, e); }";
  287. t.Properties.ClientSideEvents.DropDown = "function (s, e) { synchronizeListBoxValues(s, e); }";
  288. });
  289. }).Render();
  290. }
  291. ViewContext.Writer.Write("</div>");
  292. }
  293. ViewContext.Writer.Write("</div>");
  294. ViewContext.Writer.Write("<div class='inlineModelPropertyContainer'>");
  295. {
  296. ViewContext.Writer.Write("<div class='inlineModelProperty' style='width: 100%'>");
  297. {
  298. ViewContext.Writer.Write(Html.CustomLabelFor(m => m.CronExpression, "Interval:"));
  299. ViewContext.Writer.Write(Html.ValidationMessageFor(m => m.CronExpression).ToHtmlString());
  300. //ViewContext.Writer.Write("<div id=\"cronExpressionEditor\"></div>");
  301. //ViewContext.Writer.Write("<div id=\"cronExpressionDisplay\"></div>");
  302. ViewContext.Writer.Write(Html.Partial("~/Views/Misc/_MailNotificationCronPartial.cshtml").ToHtmlString());
  303. }
  304. ViewContext.Writer.Write("</div>");
  305. }
  306. ViewContext.Writer.Write("</div>");
  307. ViewContext.Writer.Write("</div>");
  308. Html.RenderPartial(
  309. "~/Views/Shared/_PopupButtonPanel.cshtml",
  310. new GreenTree.Nachtragsmanagement.Web.Models.Global.PopupModel
  311. {
  312. PopupName = "devPopupControlEditMailNotification",
  313. AcceptFunction = "function (s, e) { saveMailNotification(); }"
  314. }
  315. );
  316. }
  317. });
  318. s.Styles.Content.Paddings.Padding = new Unit(0);
  319. s.Styles.ModalBackground.Opacity = 0;
  320. }).GetHtml()
  321. </div>