_UserEditPartial.cshtml 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. @using GreenTree.Nachtragsmanagement.Web.Extensions
  2. @model GreenTree.Nachtragsmanagement.Web.Models.Admin.User.UserDataModel
  3. <div class="userEditContainer">
  4. <script>
  5. var textSeparator = ", ";
  6. function saveUser() {
  7. var form = $("#userEditForm");
  8. $(form).submit(function (e) {
  9. $.ajax({
  10. type: "POST",
  11. url: '@Url.Action("EditUser", "Admin")',
  12. data: form.serialize(),
  13. success: function (response) {
  14. setTimeout(function () {
  15. $(".userEditContainer").remove();
  16. if (response == "success") {
  17. devGridViewUser.PerformCallback();
  18. } else {
  19. $("body").append(response);
  20. }
  21. }, 200);
  22. }
  23. });
  24. e.preventDefault();
  25. });
  26. form.submit();
  27. }
  28. function onListBoxSelectionChanged(s, e) {
  29. if (e.index == 0)
  30. e.isSelected ? s.SelectAll() : s.UnselectAll();
  31. updateSelectAllItemState();
  32. updateText();
  33. }
  34. function updateSelectAllItemState() {
  35. isAllSelected() ? RoleValues.SelectIndices([0]) : RoleValues.UnselectIndices([0]);
  36. }
  37. function isAllSelected() {
  38. for (var i = 1; i < RoleValues.GetItemCount(); i++)
  39. if (!RoleValues.GetItem(i).selected)
  40. return false;
  41. return true;
  42. }
  43. function updateText() {
  44. var selectedItems = RoleValues.GetSelectedItems();
  45. devDropDownListRoleValues.SetText(getSelectedItemsText(selectedItems));
  46. }
  47. function synchronizeListBoxValues(s, e) {
  48. RoleValues.UnselectAll();
  49. var texts = s.GetText().split(textSeparator);
  50. var values = getValuesByTexts(texts);
  51. RoleValues.SelectValues(values);
  52. updateSelectAllItemState();
  53. updateText();
  54. }
  55. function getSelectedItemsText(items) {
  56. var texts = [];
  57. for (var i = 0; i < items.length; i++)
  58. if (items[i].index != 0)
  59. texts.push(items[i].text);
  60. return texts.join(textSeparator);
  61. }
  62. function getValuesByTexts(texts) {
  63. var actualValues = [];
  64. var item;
  65. for (var i = 0; i < texts.length; i++) {
  66. item = RoleValues.FindItemByText(texts[i]);
  67. if (item != null)
  68. actualValues.push(item.value);
  69. }
  70. return actualValues;
  71. }
  72. function onButtonEditClick(e) {
  73. if (e.buttonIndex == 0) {
  74. searchUsers();
  75. }
  76. }
  77. function searchUsers() {
  78. var searchVal = CustomNumber.GetText();
  79. if (!searchVal) return;
  80. $.ajax({
  81. type: "POST",
  82. url: '@Url.Action("SearchUsers", "Admin")',
  83. data: { searchValue: searchVal },
  84. success: function (response) {
  85. setTimeout(function () {
  86. $(".userSearchContainer").remove();
  87. $("body").append(response);
  88. }, 200);
  89. },
  90. error: function () {
  91. alert("error occured");
  92. }
  93. });
  94. }
  95. </script>
  96. @Html.DevExpress().PopupControl(s =>
  97. {
  98. s.Name = "devPopupControlEditUser";
  99. if (Model.Id == -1)
  100. s.HeaderText = "Neuen Benutzer erstellen";
  101. else
  102. s.HeaderText = "\"" + Model.Lastname + ", " + Model.Forename + "\" bearbeiten";
  103. s.Modal = true;
  104. s.Width = new Unit(400, UnitType.Pixel);
  105. s.CloseAction = CloseAction.CloseButton;
  106. s.PopupHorizontalAlign = PopupHorizontalAlign.WindowCenter;
  107. s.PopupVerticalAlign = PopupVerticalAlign.WindowCenter;
  108. s.AllowDragging = false;
  109. s.AllowResize = false;
  110. s.ShowFooter = false;
  111. s.ShowOnPageLoad = true;
  112. s.SetContent(() =>
  113. {
  114. using (Html.BeginForm("EditUser", "Admin", FormMethod.Post, new { id = "userEditForm" }))
  115. {
  116. ViewContext.Writer.Write("<div class='editFormWrapper'>");
  117. ViewContext.Writer.Write("<input type=\"hidden\" value=\"" + Model.Id + "\" id=\"Id\" name=\"Id\" />");
  118. ViewContext.Writer.Write(Html.CustomLabelFor(m => m.CustomNumber, "Personalnummer:"));
  119. Html.DevExpress().ButtonEditFor(m => m.CustomNumber, t =>
  120. {
  121. t.Width = new Unit(60, UnitType.Percentage);
  122. var searchEditButton = new EditButton();
  123. searchEditButton.Image.Url = Url.Content("~/Content/Images/search-16.png");
  124. searchEditButton.Image.UrlHottracked = Url.Content("~/Content/Images/search-16-contrast.png");
  125. t.Properties.Buttons.Add(searchEditButton);
  126. t.Properties.ClientSideEvents.ButtonClick = "function (s, e) { onButtonEditClick(e); }";
  127. t.Properties.ClientSideEvents.KeyPress = "function (s, e) { if (e.htmlEvent.keyCode == 13) { searchUsers(); } }";
  128. }).Render();
  129. ViewContext.Writer.Write("<div class='inlineModelPropertyContainer'>");
  130. ViewContext.Writer.Write("<div class='inlineModelProperty' style='width: 50%'>");
  131. ViewContext.Writer.Write(Html.CustomLabelFor(m => m.Forename, "Vorname:"));
  132. ViewContext.Writer.Write(Html.ValidationMessageFor(m => m.Forename).ToHtmlString());
  133. Html.DevExpress().TextBoxFor(m => m.Forename, t =>
  134. {
  135. t.Width = new Unit(95, UnitType.Percentage);
  136. }).Render();
  137. ViewContext.Writer.Write("</div>");
  138. ViewContext.Writer.Write("<div class='inlineModelProperty' style='width: 50%'>");
  139. ViewContext.Writer.Write(Html.CustomLabelFor(m => m.Lastname, "Nachname:"));
  140. ViewContext.Writer.Write(Html.ValidationMessageFor(m => m.Lastname).ToHtmlString());
  141. Html.DevExpress().TextBoxFor(m => m.Lastname, t =>
  142. {
  143. t.Width = new Unit(100, UnitType.Percentage);
  144. }).Render();
  145. ViewContext.Writer.Write("</div>");
  146. ViewContext.Writer.Write("</div>");
  147. ViewContext.Writer.Write(Html.CustomLabelFor(m => m.MailAddress, "E-Mail:"));
  148. ViewContext.Writer.Write(Html.ValidationMessageFor(m => m.MailAddress).ToHtmlString());
  149. Html.DevExpress().TextBoxFor(m => m.MailAddress, t =>
  150. {
  151. t.Width = new Unit(100, UnitType.Percentage);
  152. }).Render();
  153. ViewContext.Writer.Write("<div class='inlineModelPropertyContainer'>");
  154. ViewContext.Writer.Write("<div class='inlineModelProperty' style='width: 60%'>");
  155. ViewContext.Writer.Write(Html.CustomLabelFor(m => m.Password, "Passwort:"));
  156. ViewContext.Writer.Write(Html.ValidationMessageFor(m => m.Password).ToHtmlString());
  157. Html.DevExpress().TextBoxFor(m => m.Password, t =>
  158. {
  159. t.Width = new Unit(98, UnitType.Percentage);
  160. t.Properties.Password = true;
  161. }).Render();
  162. ViewContext.Writer.Write("</div>");
  163. ViewContext.Writer.Write("<div class='inlineModelProperty' style='width: 40%'>");
  164. ViewContext.Writer.Write(
  165. "<img id=\"imgPasswordInfo\" src=\""
  166. + Url.Content("~/Content/Images/info-24.png") + "\" title=\"Bei AD-Benutzern wird kein Passwort verwendet\"" +
  167. "style=\"display: none; margin-top: 35px\" />");
  168. ViewContext.Writer.Write("</div>");
  169. ViewContext.Writer.Write("</div>");
  170. Html.DevExpress().CheckBoxFor(m => m.IsActiveDirectory, t =>
  171. {
  172. t.ClientVisible = false;
  173. }).Render();
  174. ViewContext.Writer.Write(Html.CustomLabelFor(m => m.RoleValues, "Rollen:"));
  175. ViewContext.Writer.Write(Html.ValidationMessageFor(m => m.RoleValues).ToHtmlString());
  176. Html.DevExpress().DropDownEdit(t =>
  177. {
  178. t.Name = "devDropDownListRoleValues";
  179. t.Width = new Unit(100, UnitType.Percentage);
  180. if (Model.RoleDescriptions != null && Model.RoleDescriptions.Any())
  181. t.Text = String.Join(", ", Model.RoleDescriptions);
  182. t.SetDropDownWindowTemplateContent(l =>
  183. {
  184. Html.DevExpress().ListBox(lb =>
  185. {
  186. lb.Name = "RoleValues";
  187. lb.Width = new Unit(100, UnitType.Percentage);
  188. lb.Properties.TextField = "Description";
  189. lb.Properties.ValueField = "Id";
  190. lb.Properties.ValueType = typeof(int);
  191. lb.Properties.SelectionMode = ListEditSelectionMode.CheckColumn;
  192. lb.ControlStyle.Border.BorderStyle = BorderStyle.None;
  193. lb.PreRender = (sender, e) =>
  194. {
  195. var listBox = sender as MVCxListBox;
  196. foreach (ListEditItem listItem in listBox.Items)
  197. {
  198. if (Model.RoleValues == null || !Model.RoleValues.Any(m => m == (int)listItem.Value)) continue;
  199. listItem.Selected = true;
  200. }
  201. listBox.Items.Insert(0, new ListEditItem("(Alle auswählen)", -1));
  202. };
  203. lb.Properties.ClientSideEvents.SelectedIndexChanged = "function (s, e) { onListBoxSelectionChanged(s, e); }";
  204. }).BindList(ViewData["AllRoles"]).Render();
  205. t.Properties.ClientSideEvents.TextChanged = "function (s, e) { synchronizeListBoxValues(s, e); }";
  206. t.Properties.ClientSideEvents.DropDown = "function (s, e) { synchronizeListBoxValues(s, e); }";
  207. });
  208. }).Render();
  209. ViewContext.Writer.Write("</div>");
  210. Html.RenderPartial(
  211. "~/Views/Shared/_PopupButtonPanel.cshtml",
  212. new GreenTree.Nachtragsmanagement.Web.Models.Global.PopupModel
  213. {
  214. PopupName = "devPopupControlEditUser",
  215. AcceptFunction = "function (s, e) { saveUser(); }"
  216. }
  217. );
  218. }
  219. });
  220. s.Styles.Content.Paddings.Padding = new Unit(0);
  221. s.Styles.ModalBackground.Opacity = 0;
  222. }).GetHtml()
  223. </div>