GridViewSettingsHelper.cs 80 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797
  1. using DevExpress.Data;
  2. using DevExpress.Utils;
  3. using DevExpress.Web;
  4. using DevExpress.Web.ASPxThemes;
  5. using DevExpress.Web.Mvc;
  6. using DevExpress.Web.Mvc.UI;
  7. using GreenTree.Nachtragsmanagement.Core.Authentication;
  8. using GreenTree.Nachtragsmanagement.Web.Models.Appendix;
  9. using System;
  10. using System.Linq;
  11. using System.Collections.Generic;
  12. using System.Web.UI;
  13. using System.Web.UI.WebControls;
  14. using System.Web.Mvc.Html;
  15. using GreenTree.Nachtragsmanagement.Web.Models.Deviation;
  16. using GreenTree.Nachtragsmanagement.Core;
  17. using GreenTree.Nachtragsmanagement.Services.Configuration;
  18. namespace GreenTree.Nachtragsmanagement.Web.Extensions
  19. {
  20. public static class GridViewSettingsHelper
  21. {
  22. /// <summary>
  23. /// Current user context
  24. /// </summary>
  25. public static UserContext _userContext = Core.CommonHelper.UserContext();
  26. /// <summary>
  27. /// Global configuration service
  28. /// </summary>
  29. public static IConfigurationService _configurationService;
  30. /// <summary>
  31. /// Creates GridViewSettings for the site gridView
  32. /// </summary>
  33. /// <param name="html">Current HtmlHelper context.</param>
  34. public static GridViewSettings SiteGridViewSettings(this System.Web.Mvc.HtmlHelper html)
  35. {
  36. var s = new GridViewSettings();
  37. s.Name = "devGridViewSite";
  38. s.KeyFieldName = "Id";
  39. s.CallbackRouteValues = new { Controller = "Site", Action = "PartialSites" };
  40. s.Width = Unit.Percentage(99);
  41. s.Settings.ShowHeaderFilterButton = true;
  42. s.Settings.ShowFilterRow = true;
  43. s.Settings.ShowFilterRowMenu = false;
  44. s.Settings.ShowFooter = true;
  45. s.Settings.ShowGroupPanel = true;
  46. s.Settings.AutoFilterCondition = AutoFilterCondition.Contains;
  47. s.Settings.HorizontalScrollBarMode = ScrollBarMode.Auto;
  48. s.Settings.VerticalScrollBarMode = ScrollBarMode.Auto;
  49. s.Settings.VerticalScrollableHeight =
  50. (html.ViewData["ScrollHeight"] == null || (int)html.ViewData["ScrollHeight"] == -1)
  51. ? 400
  52. : (int)html.ViewData["ScrollHeight"];
  53. s.SettingsExport.Landscape = true;
  54. s.SettingsExport.FileName = "Baustellenliste";
  55. s.SettingsPopup.CustomizationWindow.Width = new Unit(250, UnitType.Pixel);
  56. s.SettingsPopup.CustomizationWindow.Height = new Unit(350, UnitType.Pixel);
  57. s.SettingsPopup.HeaderFilter.Width = new Unit(353, UnitType.Pixel);
  58. s.SettingsPopup.HeaderFilter.Height = new Unit(360, UnitType.Pixel);
  59. s.SettingsBehavior.EnableCustomizationWindow = true;
  60. s.SettingsBehavior.AllowHeaderFilter = true;
  61. s.SettingsPager.AlwaysShowPager = true;
  62. s.SettingsResizing.ColumnResizeMode = ColumnResizeMode.Control;
  63. s.SettingsPager.Position = PagerPosition.Bottom;
  64. s.SettingsPager.PageSizeItemSettings.Visible = true;
  65. s.SettingsPager.FirstPageButton.Visible = true;
  66. s.SettingsPager.LastPageButton.Visible = true;
  67. s.SettingsPager.NumericButtonCount = 5;
  68. s.Toolbars.Add(t =>
  69. {
  70. if (_userContext.CurrentUser.HasFunction("Site-Sites-Edit"))
  71. {
  72. t.Items.Add(i =>
  73. {
  74. i.Text = "Baustelle anlegen";
  75. i.Name = "AddSite";
  76. i.Image.IconID = IconID.ActionsAdd16x16;
  77. });
  78. }
  79. var refreshItem = t.Items.Add(GridViewToolbarCommand.Refresh);
  80. refreshItem.Text = "Aktualisieren";
  81. var expandItem = t.Items.Add(GridViewToolbarCommand.FullExpand);
  82. expandItem.Text = "Alle aufklappen";
  83. var collapseItem = t.Items.Add(GridViewToolbarCommand.FullCollapse);
  84. collapseItem.Text = "Alle einklappen";
  85. var filterItem = t.Items.Add(GridViewToolbarCommand.ClearFilter);
  86. filterItem.Text = "Filter entfernen";
  87. t.Items.Add(i =>
  88. {
  89. i.Text = "Spalten anzeigen / ausblenden";
  90. i.Name = "ToggleColumnChooser";
  91. i.Image.IconID = IconID.OtherViewgridlines16x16gray;
  92. i.BeginGroup = true;
  93. });
  94. t.Items.Add(i =>
  95. {
  96. i.Text = "Drucken";
  97. i.Name = "Print";
  98. i.Image.IconID = IconID.PrintDefaultprinter16x16;
  99. i.BeginGroup = true;
  100. });
  101. t.Items.Add(i =>
  102. {
  103. i.Text = "Zurücksetzen";
  104. i.Name = "ResetSettings";
  105. i.Image.IconID = IconID.ActionsReset16x16;
  106. i.BeginGroup = true;
  107. });
  108. });
  109. if (_userContext.CurrentUser.HasFunction("Site-Sites-Edit") || _userContext.CurrentUser.HasFunction("Site-Sites-Delete"))
  110. {
  111. s.Columns.Add(column =>
  112. {
  113. column.Caption = "#";
  114. column.SetDataItemTemplateContent(c =>
  115. {
  116. if (_userContext.CurrentUser.HasFunction("Site-Sites-Edit"))
  117. html.ViewContext.Writer.Write(
  118. "<a href=\"#\" onclick=\"editSite(" + DataBinder.Eval(c.DataItem, "Id") + ")\">Bearbeiten</a>");
  119. if (_userContext.CurrentUser.HasFunction("Site-Sites-Delete"))
  120. html.ViewContext.Writer.Write(
  121. "<br /><a href=\"#\" onclick=\"confirmDelete(" + DataBinder.Eval(c.DataItem, "Id") + ")\">Löschen</a>");
  122. });
  123. column.Caption = "#";
  124. column.Settings.AllowDragDrop = DefaultBoolean.False;
  125. column.Settings.AllowSort = DefaultBoolean.False;
  126. column.Width = new Unit(100, UnitType.Pixel);
  127. });
  128. }
  129. s.Columns.Add(column =>
  130. {
  131. column.Caption = "Kostenstelle";
  132. column.FieldName = "CustomNumber";
  133. column.SettingsHeaderFilter.Mode = GridHeaderFilterMode.CheckedList;
  134. column.MinWidth = 120;
  135. column.Width = new Unit(130, UnitType.Pixel);
  136. column.Settings.SortMode = DevExpress.XtraGrid.ColumnSortMode.Custom;
  137. });
  138. s.Columns.Add(column =>
  139. {
  140. column.Caption = "Bauvorhaben";
  141. column.FieldName = "Description";
  142. column.SettingsHeaderFilter.Mode = GridHeaderFilterMode.CheckedList;
  143. column.MinWidth = 150;
  144. column.Width = new Unit(150, UnitType.Pixel);
  145. });
  146. s.Columns.Add(column =>
  147. {
  148. column.Caption = "Start";
  149. column.FieldName = "Start";
  150. column.PropertiesEdit.DisplayFormatString = "dd.MM.yyyy";
  151. column.SettingsHeaderFilter.Mode = GridHeaderFilterMode.DateRangePicker;
  152. column.MinWidth = 90;
  153. column.Width = new Unit(90, UnitType.Pixel);
  154. });
  155. s.Columns.Add(column =>
  156. {
  157. column.Caption = "Ende";
  158. column.FieldName = "End";
  159. column.PropertiesEdit.DisplayFormatString = "dd.MM.yyyy";
  160. column.SettingsHeaderFilter.Mode = GridHeaderFilterMode.DateRangePicker;
  161. column.MinWidth = 90;
  162. column.Width = new Unit(90, UnitType.Pixel);
  163. });
  164. s.Columns.Add(column =>
  165. {
  166. column.Caption = "Abgeschl.";
  167. column.FieldName = "Finished";
  168. column.MinWidth = 70;
  169. column.Width = new Unit(70, UnitType.Pixel);
  170. });
  171. s.Columns.Add(column =>
  172. {
  173. column.Caption = "Offene VA";
  174. column.FieldName = "DeviationDescription";
  175. column.MinWidth = 230;
  176. column.Width = new Unit(230, UnitType.Pixel);
  177. column.SetDataItemTemplateContent(c =>
  178. {
  179. var id = Convert.ToInt32(DataBinder.Eval(c.DataItem, "Id"));
  180. var deviationDescription = DataBinder.Eval(c.DataItem, "DeviationDescription");
  181. var text = deviationDescription == null
  182. ? String.Empty
  183. : deviationDescription.ToString();
  184. var isLongText = text.ToString().Length > 80;
  185. if (isLongText)
  186. {
  187. html.ViewContext.Writer.Write(text.Substring(0, 80) + " ...");
  188. html.ViewContext.Writer.Write(
  189. "<a href=\"#\" onclick='showDeviationDescription(" + id + ",this)'><br />Anzeigen</a>");
  190. }
  191. else
  192. html.ViewContext.Writer.Write(text);
  193. });
  194. });
  195. s.Columns.Add(column =>
  196. {
  197. column.Caption = "VA-Summe";
  198. column.FieldName = "DeviationValue";
  199. column.PropertiesEdit.DisplayFormatString = "c2";
  200. column.MinWidth = 120;
  201. column.Width = new Unit(120, UnitType.Pixel);
  202. });
  203. s.Columns.Add(column =>
  204. {
  205. column.Caption = "Nachträge";
  206. column.FieldName = "AppendixDescription";
  207. column.MinWidth = 130;
  208. column.Width = new Unit(130, UnitType.Pixel);
  209. });
  210. s.Columns.Add(column =>
  211. {
  212. column.Caption = "Mitarbeiter";
  213. column.FieldName = "UserDescription";
  214. column.MinWidth = 245;
  215. column.Width = new Unit(245, UnitType.Pixel);
  216. column.SetDataItemTemplateContent(c =>
  217. {
  218. var userDescriptions = DataBinder.Eval(c.DataItem, "UserDescriptions") as List<string>;
  219. if (userDescriptions != null)
  220. {
  221. foreach (var description in userDescriptions)
  222. {
  223. var split = description.Split('|');
  224. if (split.Length > 1)
  225. html.ViewContext.Writer.Write(
  226. "<span style=\"float: left\">" + split[0] + "</span>" +
  227. "<span style=\"float: right\">" + split[1] + "</span><br />");
  228. else
  229. html.ViewContext.Writer.Write(
  230. "<span>" + split[0] + "</span><br />");
  231. }
  232. }
  233. });
  234. });
  235. s.Columns.Add(column =>
  236. {
  237. column.Caption = "Kommentar";
  238. column.FieldName = "Comment";
  239. column.CellStyle.Wrap = DefaultBoolean.True;
  240. column.SetDataItemTemplateContent(c =>
  241. {
  242. var id = Convert.ToInt32(DataBinder.Eval(c.DataItem, "Id"));
  243. var comment = DataBinder.Eval(c.DataItem, "Comment");
  244. var text = comment == null
  245. ? String.Empty
  246. : comment.ToString();
  247. var isLongText = text.ToString().Length > 40;
  248. if (isLongText)
  249. {
  250. html.ViewContext.Writer.Write(text.Substring(0, 40) + " ...");
  251. html.ViewContext.Writer.Write(
  252. "<a href=\"#\" onclick='showComment(\"site\"," + id + ",this)'><br />Anzeigen</a>");
  253. }
  254. else
  255. html.ViewContext.Writer.Write(text);
  256. if (_userContext.CurrentUser.HasFunction("Site-Sites-Edit-Comment"))
  257. html.ViewContext.Writer.Write(
  258. (isLongText ? "&nbsp;" : "<br/>") +
  259. "<a href=\"#\" onclick='editComment(\"site\"," + id + ",function() { devGridViewSite.PerformCallback(); })'>Bearbeiten</a>");
  260. });
  261. column.MinWidth = 120;
  262. column.Width = new Unit(120, UnitType.Pixel);
  263. });
  264. s.TotalSummary.Add(new ASPxSummaryItem
  265. {
  266. SummaryType = DevExpress.Data.SummaryItemType.Count,
  267. FieldName = "Description",
  268. DisplayFormat = "Anzahl<br/><i>{0:n0}</i>"
  269. });
  270. s.GroupSummary.Add(new ASPxSummaryItem
  271. {
  272. SummaryType = DevExpress.Data.SummaryItemType.Count,
  273. FieldName = "Description",
  274. DisplayFormat = "Anzahl = {0:n0}"
  275. });
  276. s.TotalSummary.Add(new ASPxSummaryItem
  277. {
  278. FieldName = "DeviationValue",
  279. SummaryType = DevExpress.Data.SummaryItemType.Sum,
  280. DisplayFormat = "VA ∑<br/><i>{0:c2}</i>"
  281. });
  282. s.GroupSummary.Add(new ASPxSummaryItem
  283. {
  284. FieldName = "DeviationValue",
  285. SummaryType = DevExpress.Data.SummaryItemType.Sum,
  286. DisplayFormat = "VA ∑ = <i>{0:c2}</i>"
  287. });
  288. s.ClientLayout = (sender, e) =>
  289. {
  290. if (e.LayoutMode == ClientLayoutMode.Loading)
  291. {
  292. if (System.Web.HttpContext.Current.Session["SiteGridState"] != null)
  293. e.LayoutData = (string)System.Web.HttpContext.Current.Session["SiteGridState"];
  294. else
  295. {
  296. var userConfigItem = _configurationService.GetUserConfigItemByNameAndUserId("SiteGridLayoutState",
  297. _userContext.CurrentUser.Id);
  298. if (userConfigItem != null)
  299. {
  300. System.Web.HttpContext.Current.Session["SiteGridState"] = userConfigItem.Value;
  301. e.LayoutData = (string)System.Web.HttpContext.Current.Session["SiteGridState"];
  302. }
  303. else
  304. ((MVCxGridView)sender).SortBy(((MVCxGridView)sender).Columns[0], ColumnSortOrder.Ascending);
  305. }
  306. }
  307. else
  308. {
  309. System.Web.HttpContext.Current.Session["SiteGridState"] = e.LayoutData;
  310. _configurationService.InsertOrUpdateUserConfigItem(new Core.Domain.Config.UserConfigItem
  311. {
  312. UserId = _userContext.CurrentUser.Id,
  313. Name = "SiteGridLayoutState",
  314. Value = e.LayoutData
  315. });
  316. }
  317. };
  318. s.PreRender = s.BeforeGetCallbackResult = (sender, e) => {
  319. MVCxGridView gridView = sender as MVCxGridView;
  320. System.Web.HttpContext.Current.Session["SiteGridViewState"] = new MVCxGridViewState(gridView);
  321. };
  322. s.CustomColumnSort = (sender, e) =>
  323. {
  324. if (e.Column.FieldName != "CustomNumber") return;
  325. int.TryParse(e.GetRow1Value("CustomNumber").ToString(), out int rowVal1);
  326. int.TryParse(e.GetRow2Value("CustomNumber").ToString(), out int rowVal2);
  327. e.Result = (rowVal1).CompareTo(rowVal2);
  328. e.Handled = true;
  329. };
  330. s.ClientSideEvents.BeginCallback = "function (s, e) { e.customArgs['scrollHeight'] = [ gridScrollHeight ]; }";
  331. s.ClientSideEvents.ToolbarItemClick = "function (s, e) { onToolbarItemClick(s, e); }";
  332. s.Styles.AlternatingRow.BackColor = System.Drawing.Color.FromArgb(247, 247, 247);
  333. s.Styles.Footer.CssClass += "devExGridFooterPanel";
  334. s.Styles.GroupRow.CssClass += "devExGridGroupRow";
  335. return s;
  336. }
  337. /// <summary>
  338. /// Creates GridViewSettings for the deviation gridView
  339. /// </summary>
  340. /// <param name="html">Current HtmlHelper context.</param>
  341. public static GridViewSettings DeviationGridViewSettings(this System.Web.Mvc.HtmlHelper html)
  342. {
  343. var s = new GridViewSettings();
  344. s.Name = "devGridViewDeviation";
  345. s.KeyFieldName = "Id";
  346. s.CallbackRouteValues = new { Controller = "Deviation", Action = "PartialDeviations" };
  347. s.Width = Unit.Percentage(99);
  348. s.Settings.ShowHeaderFilterButton = true;
  349. s.Settings.ShowFilterRow = true;
  350. s.Settings.ShowFilterRowMenu = true;
  351. s.Settings.ShowFooter = true;
  352. s.Settings.ShowGroupPanel = true;
  353. s.Settings.AutoFilterCondition = AutoFilterCondition.Contains;
  354. s.Settings.HorizontalScrollBarMode = ScrollBarMode.Auto;
  355. s.Settings.VerticalScrollBarMode = ScrollBarMode.Auto;
  356. s.Settings.VerticalScrollableHeight =
  357. (html.ViewData["ScrollHeight"] == null || (int)html.ViewData["ScrollHeight"] == -1)
  358. ? 400
  359. : (int)html.ViewData["ScrollHeight"];
  360. s.SettingsExport.Landscape = true;
  361. s.SettingsExport.FileName = "Vertragsabweichungsliste";
  362. s.SettingsPopup.CustomizationWindow.Width = new Unit(250, UnitType.Pixel);
  363. s.SettingsPopup.CustomizationWindow.Height = new Unit(350, UnitType.Pixel);
  364. s.SettingsPopup.HeaderFilter.Width = new Unit(353, UnitType.Pixel);
  365. s.SettingsPopup.HeaderFilter.Height = new Unit(360, UnitType.Pixel);
  366. s.SettingsBehavior.EnableCustomizationWindow = true;
  367. s.SettingsBehavior.AllowHeaderFilter = true;
  368. s.SettingsPager.AlwaysShowPager = true;
  369. s.SettingsResizing.ColumnResizeMode = ColumnResizeMode.Control;
  370. s.SettingsPager.Position = PagerPosition.Bottom;
  371. s.SettingsPager.PageSizeItemSettings.Visible = true;
  372. s.SettingsPager.FirstPageButton.Visible = true;
  373. s.SettingsPager.LastPageButton.Visible = true;
  374. s.SettingsPager.NumericButtonCount = 5;
  375. s.Toolbars.Add(t =>
  376. {
  377. var refreshItem = t.Items.Add(GridViewToolbarCommand.Refresh);
  378. refreshItem.Text = "Aktualisieren";
  379. var expandItem = t.Items.Add(GridViewToolbarCommand.FullExpand);
  380. expandItem.Text = "Alle aufklappen";
  381. var collapseItem = t.Items.Add(GridViewToolbarCommand.FullCollapse);
  382. collapseItem.Text = "Alle einklappen";
  383. var filterItem = t.Items.Add(GridViewToolbarCommand.ClearFilter);
  384. filterItem.Text = "Filter entfernen";
  385. t.Items.Add(i =>
  386. {
  387. i.Text = "Spalten anzeigen / ausblenden";
  388. i.Name = "ToggleColumnChooser";
  389. i.Image.IconID = IconID.OtherViewgridlines16x16gray;
  390. i.BeginGroup = true;
  391. });
  392. t.Items.Add(i =>
  393. {
  394. i.Text = "Drucken";
  395. i.Name = "Print";
  396. i.Image.IconID = IconID.PrintDefaultprinter16x16;
  397. i.BeginGroup = true;
  398. });
  399. t.Items.Add(i =>
  400. {
  401. i.Text = "Zurücksetzen";
  402. i.Name = "ResetSettings";
  403. i.Image.IconID = IconID.ActionsReset16x16;
  404. i.BeginGroup = true;
  405. });
  406. });
  407. s.Columns.Add(column =>
  408. {
  409. column.Caption = "#";
  410. column.FieldName = "CustomNumber";
  411. column.MinWidth = 50;
  412. column.Width = new Unit(60, UnitType.Pixel);
  413. column.Settings.AutoFilterCondition = AutoFilterCondition.Equals;
  414. column.Settings.ShowFilterRowMenu = DefaultBoolean.False;
  415. column.SettingsHeaderFilter.Mode = GridHeaderFilterMode.CheckedList;
  416. column.Settings.SortMode = DevExpress.XtraGrid.ColumnSortMode.Custom;
  417. });
  418. s.Columns.Add(column =>
  419. {
  420. column.Caption = "Bezeichnung";
  421. column.FieldName = "Description";
  422. column.MinWidth = 220;
  423. column.Width = new Unit(250, UnitType.Pixel);
  424. column.SettingsHeaderFilter.Mode = GridHeaderFilterMode.CheckedList;
  425. });
  426. s.Columns.Add(column =>
  427. {
  428. column.Caption = "Baustelle";
  429. column.FieldName = "SiteDescription";
  430. column.MinWidth = 150;
  431. column.Width = new Unit(150, UnitType.Pixel);
  432. column.SettingsHeaderFilter.Mode = GridHeaderFilterMode.CheckedList;
  433. });
  434. s.Columns.Add(column =>
  435. {
  436. column.Caption = "Kst.-Stelle";
  437. column.FieldName = "SiteCustomNumber";
  438. column.MinWidth = 120;
  439. column.Width = new Unit(130, UnitType.Pixel);
  440. column.SettingsHeaderFilter.Mode = GridHeaderFilterMode.CheckedList;
  441. });
  442. s.Columns.Add(column =>
  443. {
  444. column.Caption = "Mitarbeiter";
  445. column.FieldName = "UserDescription";
  446. column.MinWidth = 250;
  447. column.Width = new Unit(250, UnitType.Pixel);
  448. column.SetDataItemTemplateContent(c =>
  449. {
  450. var userDescriptions = DataBinder.Eval(c.DataItem, "UserDescriptions") as List<string>;
  451. if (userDescriptions != null)
  452. {
  453. foreach (var description in userDescriptions)
  454. {
  455. var split = description.Split('|');
  456. if (split.Length > 1)
  457. html.ViewContext.Writer.Write(
  458. "<span style=\"float: left\">" + split[0] + "</span>" +
  459. "<span style=\"float: right\">" + split[1] + "</span><br />");
  460. else
  461. html.ViewContext.Writer.Write(
  462. "<span>" + split[0] + "</span><br />");
  463. }
  464. }
  465. });
  466. });
  467. s.Columns.Add(column =>
  468. {
  469. column.Caption = "Nachtrag";
  470. column.FieldName = "AppendixDescription";
  471. column.MinWidth = 100;
  472. column.Width = new Unit(100, UnitType.Pixel);
  473. column.SettingsHeaderFilter.Mode = GridHeaderFilterMode.CheckedList;
  474. });
  475. s.Columns.Add(column =>
  476. {
  477. column.Caption = "Einreichung";
  478. column.FieldName = "ReceiptDate";
  479. column.PropertiesEdit.DisplayFormatString = "dd.MM.yyyy";
  480. column.SettingsHeaderFilter.Mode = GridHeaderFilterMode.DateRangePicker;
  481. column.MinWidth = 110;
  482. column.Width = new Unit(110, UnitType.Pixel);
  483. });
  484. s.Columns.Add(column =>
  485. {
  486. column.Caption = "Tage VA-NT";
  487. column.FieldName = "DaysReceiptToAppendixOffering";
  488. column.MinWidth = 100;
  489. column.Width = new Unit(110, UnitType.Pixel);
  490. column.HeaderStyle.Wrap = DefaultBoolean.True;
  491. });
  492. s.Columns.Add(column =>
  493. {
  494. column.Caption = "Schätzung";
  495. column.FieldName = "Value";
  496. column.PropertiesEdit.DisplayFormatString = "c2";
  497. column.MinWidth = 100;
  498. column.Width = new Unit(120, UnitType.Pixel);
  499. });
  500. s.Columns.Add(column =>
  501. {
  502. column.Caption = "Bewert.";
  503. column.FieldName = "Percentage";
  504. column.PropertiesEdit.DisplayFormatString = "p0";
  505. column.MinWidth = 70;
  506. column.Width = new Unit(80, UnitType.Pixel);
  507. });
  508. s.Columns.Add(column =>
  509. {
  510. column.Caption = "Schätzung bew.";
  511. column.FieldName = "PercentageValue";
  512. column.PropertiesEdit.DisplayFormatString = "c2";
  513. column.MinWidth = 100;
  514. column.Width = new Unit(120, UnitType.Pixel);
  515. column.HeaderStyle.Wrap = DefaultBoolean.True;
  516. });
  517. s.Columns.Add(column =>
  518. {
  519. column.Caption = "Status";
  520. column.FieldName = "StatusDescription";
  521. column.MinWidth = 110;
  522. column.Width = new Unit(120, UnitType.Pixel);
  523. column.SettingsHeaderFilter.Mode = GridHeaderFilterMode.CheckedList;
  524. });
  525. s.Columns.Add(column =>
  526. {
  527. column.Caption = "VA-Kategorien";
  528. column.FieldName = "DisturbanceValuesDescription";
  529. column.MinWidth = 190;
  530. column.Width = new Unit(220, UnitType.Pixel);
  531. column.SetFilterTemplateContent(f =>
  532. {
  533. html.DevExpress().TextBox(t =>
  534. {
  535. t.Name = "devTextBoxFilterDisturbanceValuesDescription";
  536. t.Width = new Unit(100, UnitType.Percentage);
  537. t.Properties.ClientSideEvents.Init =
  538. "function (s, e) { " +
  539. " if (customFilters != null && customFilters['DisturbanceValuesDescription'] != null) {" +
  540. " s.SetText(customFilters['DisturbanceValuesDescription']); }}";
  541. t.Properties.ClientSideEvents.KeyUp =
  542. "function (s, e) { " +
  543. " customFilters['DisturbanceValuesDescription'] = s.GetValue(); " +
  544. " setFilterTimer(customFilterDelay, function () { devGridViewDeviation.PerformCallback(); }); }";
  545. }).Render();
  546. });
  547. column.UnboundType = DevExpress.Data.UnboundColumnType.Decimal;
  548. column.UnboundExpression = "[DisturbanceValueSum]";
  549. });
  550. s.Columns.Add(column =>
  551. {
  552. column.Caption = "Art";
  553. column.FieldName = "KindDescription";
  554. column.MinWidth = 140;
  555. column.Width = new Unit(140, UnitType.Pixel);
  556. column.SettingsHeaderFilter.Mode = GridHeaderFilterMode.CheckedList;
  557. });
  558. s.Columns.Add(column =>
  559. {
  560. column.Caption = "Kommentar";
  561. column.FieldName = "Comment";
  562. column.CellStyle.Wrap = DefaultBoolean.True;
  563. column.SetDataItemTemplateContent(c =>
  564. {
  565. var id = Convert.ToInt32(DataBinder.Eval(c.DataItem, "Id"));
  566. var comment = DataBinder.Eval(c.DataItem, "Comment");
  567. var text = comment == null
  568. ? String.Empty
  569. : comment.ToString();
  570. var isLongText = text.ToString().Length > 40;
  571. if (isLongText)
  572. {
  573. html.ViewContext.Writer.Write(text.Substring(0, 40) + " ...");
  574. html.ViewContext.Writer.Write(
  575. "<a href=\"#\" onclick='showComment(\"deviation\"," + id + ",this)'><br />Anzeigen</a>");
  576. }
  577. else
  578. html.ViewContext.Writer.Write(text);
  579. if (_userContext.CurrentUser.HasFunction("Deviation-Deviations-Edit-Comment"))
  580. html.ViewContext.Writer.Write(
  581. (isLongText ? "&nbsp;" : "<br/>") +
  582. "&nbsp;<a href=\"#\" onclick='editComment(\"deviation\"," + id + ",function() { devGridViewDeviation.PerformCallback(); })'>Bearbeiten</a>");
  583. });
  584. column.MinWidth = 180;
  585. column.Width = new Unit(180, UnitType.Pixel);
  586. });
  587. //s.SetDataRowTemplateContent(t =>
  588. //{
  589. // var list = t.Grid.DataSource as List<DeviationDataModel>;
  590. // var model = list.First(l => l.Id == (int)t.KeyValue);
  591. // html.RenderPartial("~/Views/Deviations/_DeviationDataRowPartial.cshtml", model, html.ViewData);
  592. //});
  593. var totalDaysReceiptToAppendixOfferingSum = 0;
  594. var totalDaysReceiptToAppendixOfferingCount = 0;
  595. var totalDisturbanceSum = default(decimal);
  596. var totalPercentageValueSumZeroSummarize = default(decimal);
  597. s.CustomSummaryCalculate = (sender, e) =>
  598. {
  599. if (e.SummaryProcess == CustomSummaryProcess.Start)
  600. {
  601. totalDaysReceiptToAppendixOfferingSum = 0;
  602. totalDaysReceiptToAppendixOfferingCount = 0;
  603. totalDisturbanceSum = 0;
  604. totalPercentageValueSumZeroSummarize = 0;
  605. }
  606. if (e.SummaryProcess == CustomSummaryProcess.Calculate)
  607. {
  608. var daysReceiptToAppendixOfferingVal = e.GetValue("DaysReceiptToAppendixOffering");
  609. if (daysReceiptToAppendixOfferingVal != null)
  610. {
  611. totalDaysReceiptToAppendixOfferingCount++;
  612. totalDaysReceiptToAppendixOfferingSum += Convert.ToInt32(daysReceiptToAppendixOfferingVal);
  613. }
  614. var disturbanceVal = e.GetValue("DisturbanceValueSum");
  615. if (disturbanceVal != null)
  616. totalDisturbanceSum += Convert.ToDecimal(disturbanceVal);
  617. var isZeroValueSum = e.GetValue("IsZeroSummarize");
  618. if (isZeroValueSum == null || (isZeroValueSum != null && !Convert.ToBoolean(isZeroValueSum)))
  619. {
  620. var percentageValue = e.GetValue("PercentageValue");
  621. if (percentageValue != null)
  622. totalPercentageValueSumZeroSummarize += (decimal)percentageValue;
  623. }
  624. }
  625. if (e.SummaryProcess == CustomSummaryProcess.Finalize)
  626. {
  627. var summaryItem = (ASPxSummaryItem)e.Item;
  628. if (summaryItem.FieldName == "DaysReceiptToAppendixOffering")
  629. {
  630. if (totalDaysReceiptToAppendixOfferingSum == 0 || totalDaysReceiptToAppendixOfferingCount == 0)
  631. e.TotalValue = 0;
  632. else
  633. e.TotalValue = totalDaysReceiptToAppendixOfferingSum / totalDaysReceiptToAppendixOfferingCount;
  634. }
  635. else if (summaryItem.FieldName == "DisturbanceValuesDescription")
  636. e.TotalValue = totalDisturbanceSum;
  637. else if (summaryItem.FieldName == "StatusDescription")
  638. e.TotalValue = totalPercentageValueSumZeroSummarize;
  639. }
  640. };
  641. s.TotalSummary.Add(new ASPxSummaryItem
  642. {
  643. SummaryType = DevExpress.Data.SummaryItemType.Count,
  644. FieldName = "SiteDescription",
  645. DisplayFormat = "Anzahl<br/><i>{0:n0}</i>"
  646. });
  647. s.GroupSummary.Add(new ASPxSummaryItem
  648. {
  649. SummaryType = DevExpress.Data.SummaryItemType.Count,
  650. FieldName = "SiteDescription",
  651. DisplayFormat = "Anzahl = {0:n0}"
  652. });
  653. s.TotalSummary.Add(new ASPxSummaryItem
  654. {
  655. FieldName = "Value",
  656. SummaryType = DevExpress.Data.SummaryItemType.Sum,
  657. DisplayFormat = "Schätzung ∑<br/><i>{0:c2}</i>"
  658. });
  659. s.GroupSummary.Add(new ASPxSummaryItem
  660. {
  661. FieldName = "Value",
  662. SummaryType = DevExpress.Data.SummaryItemType.Sum,
  663. DisplayFormat = "Schätzung ∑ = <i>{0:c2}</i>"
  664. });
  665. s.TotalSummary.Add(new ASPxSummaryItem
  666. {
  667. FieldName = "Percentage",
  668. SummaryType = DevExpress.Data.SummaryItemType.Average,
  669. DisplayFormat = "Bew. Ø<br/><i>{0:p0}</i>"
  670. });
  671. s.GroupSummary.Add(new ASPxSummaryItem
  672. {
  673. FieldName = "Percentage",
  674. SummaryType = DevExpress.Data.SummaryItemType.Average,
  675. DisplayFormat = "Bew. Ø = <i>{0:p0}</i>"
  676. });
  677. s.TotalSummary.Add(new ASPxSummaryItem
  678. {
  679. FieldName = "PercentageValue",
  680. SummaryType = DevExpress.Data.SummaryItemType.Sum,
  681. DisplayFormat = "Schätz. bew. ∑<br/><i>{0:c2}</i>"
  682. });
  683. s.GroupSummary.Add(new ASPxSummaryItem
  684. {
  685. FieldName = "PercentageValue",
  686. SummaryType = DevExpress.Data.SummaryItemType.Sum,
  687. DisplayFormat = "Schätz. bew. ∑ = <i>{0:c2}</i>"
  688. });
  689. s.TotalSummary.Add(new ASPxSummaryItem
  690. {
  691. FieldName = "StatusDescription",
  692. SummaryType = DevExpress.Data.SummaryItemType.Custom,
  693. DisplayFormat = "Schätz. o. Sta. ∑<br/><i>{0:c2}</i>"
  694. });
  695. s.GroupSummary.Add(new ASPxSummaryItem
  696. {
  697. FieldName = "StatusDescription",
  698. SummaryType = DevExpress.Data.SummaryItemType.Custom,
  699. DisplayFormat = "Schätz. o. Sta. ∑ = <i>{0:c2}</i>"
  700. });
  701. s.TotalSummary.Add(new ASPxSummaryItem
  702. {
  703. FieldName = "DaysReceiptToAppendixOffering",
  704. SummaryType = DevExpress.Data.SummaryItemType.Custom,
  705. DisplayFormat = "T. VA-NT Ø<br/><i>{0:n0}</i>"
  706. });
  707. s.GroupSummary.Add(new ASPxSummaryItem
  708. {
  709. FieldName = "DaysReceiptToAppendixOffering",
  710. SummaryType = DevExpress.Data.SummaryItemType.Custom,
  711. DisplayFormat = "Tage VA-NT Ø = <i>{0:n0}</i>"
  712. });
  713. s.TotalSummary.Add(new ASPxSummaryItem
  714. {
  715. FieldName = "DisturbanceValuesDescription",
  716. SummaryType = DevExpress.Data.SummaryItemType.Custom,
  717. DisplayFormat = "Kat. ∑<br/><i>{0:c2}</i>"
  718. });
  719. s.GroupSummary.Add(new ASPxSummaryItem
  720. {
  721. FieldName = "DisturbanceValuesDescription",
  722. SummaryType = DevExpress.Data.SummaryItemType.Custom,
  723. DisplayFormat = "Kat. ∑ = <i>{0:c2}</i>"
  724. });
  725. s.HtmlRowPrepared = (sender, e) =>
  726. {
  727. var displayColor = e.GetValue("DisplayColor");
  728. if (displayColor != null && e.RowType == GridViewRowType.Data)
  729. e.Row.BackColor = System.Drawing.ColorTranslator.FromHtml(displayColor.ToString());
  730. };
  731. s.ClientLayout = (sender, e) =>
  732. {
  733. if (e.LayoutMode == ClientLayoutMode.Loading)
  734. {
  735. if (System.Web.HttpContext.Current.Session["DeviationGridState"] != null)
  736. e.LayoutData = (string)System.Web.HttpContext.Current.Session["DeviationGridState"];
  737. else
  738. {
  739. var userConfigItem = _configurationService.GetUserConfigItemByNameAndUserId("DeviationGridLayoutState",
  740. _userContext.CurrentUser.Id);
  741. if (userConfigItem != null)
  742. {
  743. System.Web.HttpContext.Current.Session["DeviationGridState"] = userConfigItem.Value;
  744. e.LayoutData = (string)System.Web.HttpContext.Current.Session["DeviationGridState"];
  745. }
  746. else
  747. ((MVCxGridView)sender).SortBy(((MVCxGridView)sender).Columns[0], ColumnSortOrder.Ascending);
  748. }
  749. }
  750. else
  751. {
  752. System.Web.HttpContext.Current.Session["DeviationGridState"] = e.LayoutData;
  753. _configurationService.InsertOrUpdateUserConfigItem(new Core.Domain.Config.UserConfigItem
  754. {
  755. UserId = _userContext.CurrentUser.Id,
  756. Name = "DeviationGridLayoutState",
  757. Value = e.LayoutData
  758. });
  759. }
  760. };
  761. s.PreRender = s.BeforeGetCallbackResult = (sender, e) => {
  762. MVCxGridView gridView = sender as MVCxGridView;
  763. System.Web.HttpContext.Current.Session["DeviationGridViewState"] = new MVCxGridViewState(gridView);
  764. };
  765. s.CustomColumnSort = (sender, e) =>
  766. {
  767. if (e.Column.FieldName != "CustomNumber") return;
  768. int.TryParse(e.GetRow1Value("CustomNumber").ToString(), out int rowVal1);
  769. int.TryParse(e.GetRow2Value("CustomNumber").ToString(), out int rowVal2);
  770. e.Result = (rowVal1).CompareTo(rowVal2);
  771. e.Handled = true;
  772. };
  773. s.ClientSideEvents.BeginCallback = "function (s, e) { " +
  774. "e.customArgs['scrollHeight'] = [ gridScrollHeight ]; " +
  775. "e.customArgs['customFilters'] = [ JSON.stringify(customFilters) ]; }";
  776. s.ClientSideEvents.ToolbarItemClick = "function (s, e) { onToolbarItemClick(s, e); }";
  777. s.Styles.Footer.CssClass += "devExGridFooterPanel";
  778. s.Styles.GroupRow.CssClass += "devExGridGroupRow";
  779. s.Styles.AlternatingRow.BackColor = System.Drawing.Color.FromArgb(247, 247, 247);
  780. return s;
  781. }
  782. /// <summary>
  783. /// Creates GridViewSettings for the appendix gridView
  784. /// </summary>
  785. /// <param name="html">Current HtmlHelper context.</param>
  786. public static GridViewSettings AppendixGridViewSettings(this System.Web.Mvc.HtmlHelper html)
  787. {
  788. var s = new GridViewSettings();
  789. s.Name = "devGridViewAppendix";
  790. s.KeyFieldName = "Id";
  791. s.CallbackRouteValues = new { Controller = "Appendix", Action = "PartialAppendices" };
  792. s.Width = Unit.Percentage(99);
  793. s.Settings.ShowHeaderFilterButton = true;
  794. s.Settings.ShowFilterRow = true;
  795. s.Settings.ShowFilterRowMenu = true;
  796. s.Settings.ShowFooter = true;
  797. s.Settings.ShowGroupPanel = true;
  798. s.Settings.AutoFilterCondition = AutoFilterCondition.Contains;
  799. s.Settings.HorizontalScrollBarMode = ScrollBarMode.Auto;
  800. s.Settings.VerticalScrollBarMode = ScrollBarMode.Auto;
  801. s.Settings.VerticalScrollableHeight =
  802. (html.ViewData["ScrollHeight"] == null || (int)html.ViewData["ScrollHeight"] == -1)
  803. ? 400
  804. : (int)html.ViewData["ScrollHeight"];
  805. s.SettingsExport.Landscape = true;
  806. s.SettingsExport.FileName = "Nachtragsliste";
  807. s.SettingsPopup.CustomizationWindow.Width = new Unit(250, UnitType.Pixel);
  808. s.SettingsPopup.CustomizationWindow.Height = new Unit(350, UnitType.Pixel);
  809. s.SettingsPopup.HeaderFilter.Width = new Unit(353, UnitType.Pixel);
  810. s.SettingsPopup.HeaderFilter.Height = new Unit(360, UnitType.Pixel);
  811. s.SettingsBehavior.EnableCustomizationWindow = true;
  812. s.SettingsBehavior.AllowHeaderFilter = true;
  813. s.SettingsPager.AlwaysShowPager = true;
  814. s.SettingsResizing.ColumnResizeMode = ColumnResizeMode.Control;
  815. s.SettingsPager.Position = PagerPosition.Bottom;
  816. s.SettingsPager.PageSizeItemSettings.Visible = true;
  817. s.SettingsPager.FirstPageButton.Visible = true;
  818. s.SettingsPager.LastPageButton.Visible = true;
  819. s.SettingsPager.NumericButtonCount = 5;
  820. s.Toolbars.Add(t =>
  821. {
  822. var refreshItem = t.Items.Add(GridViewToolbarCommand.Refresh);
  823. refreshItem.Text = "Aktualisieren";
  824. var expandItem = t.Items.Add(GridViewToolbarCommand.FullExpand);
  825. expandItem.Text = "Alle aufklappen";
  826. var collapseItem = t.Items.Add(GridViewToolbarCommand.FullCollapse);
  827. collapseItem.Text = "Alle einklappen";
  828. var filterItem = t.Items.Add(GridViewToolbarCommand.ClearFilter);
  829. filterItem.Text = "Filter entfernen";
  830. t.Items.Add(i =>
  831. {
  832. i.Text = "Spalten anzeigen / ausblenden";
  833. i.Name = "ToggleColumnChooser";
  834. i.Image.IconID = IconID.OtherViewgridlines16x16gray;
  835. i.BeginGroup = true;
  836. });
  837. t.Items.Add(i =>
  838. {
  839. i.Text = "Drucken";
  840. i.Name = "Print";
  841. i.Image.IconID = IconID.PrintDefaultprinter16x16;
  842. i.BeginGroup = true;
  843. });
  844. t.Items.Add(i =>
  845. {
  846. i.Text = "Zurücksetzen";
  847. i.Name = "ResetSettings";
  848. i.Image.IconID = IconID.ActionsReset16x16;
  849. i.BeginGroup = true;
  850. });
  851. });
  852. s.Columns.Add(column =>
  853. {
  854. column.Caption = "#";
  855. column.FieldName = "CustomNumber";
  856. column.MinWidth = 80;
  857. column.Width = new Unit(80, UnitType.Pixel);
  858. column.Settings.AutoFilterCondition = AutoFilterCondition.Equals;
  859. column.Settings.ShowFilterRowMenu = DefaultBoolean.False;
  860. column.SettingsHeaderFilter.Mode = GridHeaderFilterMode.CheckedList;
  861. column.Settings.SortMode = DevExpress.XtraGrid.ColumnSortMode.Custom;
  862. });
  863. s.Columns.Add(column =>
  864. {
  865. column.Caption = "Bezeichnung";
  866. column.FieldName = "Description";
  867. column.MinWidth = 200;
  868. column.Width = new Unit(200, UnitType.Pixel);
  869. column.SettingsHeaderFilter.Mode = GridHeaderFilterMode.CheckedList;
  870. column.SetDataItemTemplateContent(c =>
  871. {
  872. var id = Convert.ToInt32(DataBinder.Eval(c.DataItem, "Id"));
  873. var description = DataBinder.Eval(c.DataItem, "Description");
  874. html.ViewContext.Writer.Write(description +
  875. "<br/><a href=\"#\" onclick='viewAppendix(" + id + ")'>Details anzeigen</a>");
  876. });
  877. });
  878. s.Columns.Add(column =>
  879. {
  880. column.Caption = "Baustelle";
  881. column.FieldName = "SiteDescription";
  882. column.MinWidth = 150;
  883. column.Width = new Unit(150, UnitType.Pixel);
  884. column.SettingsHeaderFilter.Mode = GridHeaderFilterMode.CheckedList;
  885. });
  886. s.Columns.Add(column =>
  887. {
  888. column.Caption = "Kst.-Stelle";
  889. column.FieldName = "SiteCustomNumber";
  890. column.MinWidth = 120;
  891. column.Width = new Unit(120, UnitType.Pixel);
  892. column.SettingsHeaderFilter.Mode = GridHeaderFilterMode.CheckedList;
  893. });
  894. s.Columns.Add(column =>
  895. {
  896. column.Caption = "Mitarbeiter";
  897. column.FieldName = "UserDescription";
  898. column.MinWidth = 245;
  899. column.Width = new Unit(245, UnitType.Pixel);
  900. column.SetDataItemTemplateContent(c =>
  901. {
  902. var userDescriptions = DataBinder.Eval(c.DataItem, "UserDescriptions") as List<string>;
  903. if (userDescriptions != null)
  904. {
  905. foreach (var description in userDescriptions)
  906. {
  907. var split = description.Split('|');
  908. if (split.Length > 1)
  909. html.ViewContext.Writer.Write(
  910. "<span style=\"float: left\">" + split[0] + "</span>" +
  911. "<span style=\"float: right\">" + split[1] + "</span><br />");
  912. else
  913. html.ViewContext.Writer.Write(
  914. "<span>" + split[0] + "</span><br />");
  915. }
  916. }
  917. });
  918. });
  919. s.Columns.Add(column =>
  920. {
  921. column.Caption = "Einreichung";
  922. column.FieldName = "OfferingDate";
  923. column.PropertiesEdit.DisplayFormatString = "dd.MM.yyyy";
  924. column.MinWidth = 100;
  925. column.Width = new Unit(110, UnitType.Pixel);
  926. });
  927. s.Columns.Add(column =>
  928. {
  929. column.Caption = "Angeb. -Summe";
  930. column.FieldName = "OfferingValue";
  931. column.PropertiesEdit.DisplayFormatString = "c2";
  932. column.MinWidth = 100;
  933. column.Width = new Unit(110, UnitType.Pixel);
  934. column.HeaderStyle.Wrap = DefaultBoolean.True;
  935. });
  936. s.Columns.Add(column =>
  937. {
  938. column.Caption = "Bewert.";
  939. column.FieldName = "Percentage";
  940. column.PropertiesEdit.DisplayFormatString = "p0";
  941. column.MinWidth = 70;
  942. column.Width = new Unit(60, UnitType.Pixel);
  943. });
  944. s.Columns.Add(column =>
  945. {
  946. column.Caption = "Angebot bew.";
  947. column.FieldName = "PercentageValue";
  948. column.PropertiesEdit.DisplayFormatString = "c2";
  949. column.MinWidth = 100;
  950. column.Width = new Unit(120, UnitType.Pixel);
  951. column.HeaderStyle.Wrap = DefaultBoolean.True;
  952. });
  953. s.Columns.Add(column =>
  954. {
  955. column.Caption = "Verhand. -Summe";
  956. column.FieldName = "NegotiationValue";
  957. column.PropertiesEdit.DisplayFormatString = "c2";
  958. column.MinWidth = 110;
  959. column.Width = new Unit(110, UnitType.Pixel);
  960. column.HeaderStyle.Wrap = DefaultBoolean.True;
  961. });
  962. s.Columns.Add(column =>
  963. {
  964. column.Caption = "Verh.-Quote";
  965. column.FieldName = "RelationOfferingToNegotiation";
  966. column.PropertiesEdit.DisplayFormatString = "p2";
  967. column.MinWidth = 115;
  968. column.Width = new Unit(115, UnitType.Pixel);
  969. column.HeaderStyle.Wrap = DefaultBoolean.True;
  970. });
  971. s.Columns.Add(column =>
  972. {
  973. column.Caption = "VA";
  974. column.FieldName = "DeviationDescription";
  975. column.MinWidth = 80;
  976. column.Width = new Unit(80, UnitType.Pixel);
  977. });
  978. s.Columns.Add(column =>
  979. {
  980. column.Caption = "Fak. Ang. zu VA";
  981. column.FieldName = "RelationOfferingToDeviations";
  982. column.PropertiesEdit.DisplayFormatString = "n2";
  983. column.MinWidth = 100;
  984. column.Width = new Unit(100, UnitType.Pixel);
  985. column.HeaderStyle.Wrap = DefaultBoolean.True;
  986. });
  987. s.Columns.Add(column =>
  988. {
  989. column.Caption = "AR gestellt";
  990. column.FieldName = "OrderInvoiceCreatedDescription";
  991. column.MinWidth = 60;
  992. column.Width = new Unit(80, UnitType.Pixel);
  993. column.HeaderStyle.Wrap = DefaultBoolean.True;
  994. column.SettingsHeaderFilter.Mode = GridHeaderFilterMode.CheckedList;
  995. column.SetDataItemTemplateContent(c =>
  996. {
  997. var id = Convert.ToInt32(DataBinder.Eval(c.DataItem, "Id"));
  998. var description = DataBinder.Eval(c.DataItem, "OrderInvoiceCreatedDescription");
  999. if (_userContext.CurrentUser.HasFunction("Appendix-Appendices-Edit"))
  1000. html.ViewContext.Writer.Write(description +
  1001. "<br/><a href=\"#\" onclick='editOrderInvoiceCreated(" + id + "," +
  1002. " function() { devGridViewAppendix.PerformCallback(); })'>Ändern</a>");
  1003. });
  1004. });
  1005. s.Columns.Add(column =>
  1006. {
  1007. column.Caption = "Status";
  1008. column.FieldName = "StateDescription";
  1009. column.MinWidth = 100;
  1010. column.Width = new Unit(100, UnitType.Pixel);
  1011. column.SettingsHeaderFilter.Mode = GridHeaderFilterMode.CheckedList;
  1012. });
  1013. s.Columns.Add(column =>
  1014. {
  1015. column.Caption = "Bestellsch.-Datum";
  1016. column.FieldName = "OrderDate";
  1017. column.PropertiesEdit.DisplayFormatString = "dd.MM.yyyy";
  1018. column.MinWidth = 110;
  1019. column.Width = new Unit(110, UnitType.Pixel);
  1020. column.HeaderStyle.Wrap = DefaultBoolean.True;
  1021. });
  1022. s.Columns.Add(column =>
  1023. {
  1024. column.Caption = "Bestellsch.-Nummer";
  1025. column.FieldName = "OrderNumber";
  1026. column.MinWidth = 90;
  1027. column.Width = new Unit(110, UnitType.Pixel);
  1028. column.HeaderStyle.Wrap = DefaultBoolean.True;
  1029. });
  1030. s.Columns.Add(column =>
  1031. {
  1032. column.Caption = "NT-Kategorien";
  1033. column.FieldName = "CategoryValuesDescription";
  1034. column.MinWidth = 200;
  1035. column.Width = new Unit(200, UnitType.Pixel);
  1036. });
  1037. s.Columns.Add(column =>
  1038. {
  1039. column.Caption = "Kommentar";
  1040. column.FieldName = "Comment";
  1041. column.CellStyle.Wrap = DefaultBoolean.True;
  1042. column.SetDataItemTemplateContent(c =>
  1043. {
  1044. var id = Convert.ToInt32(DataBinder.Eval(c.DataItem, "Id"));
  1045. var comment = DataBinder.Eval(c.DataItem, "Comment");
  1046. var text = comment == null
  1047. ? String.Empty
  1048. : comment.ToString();
  1049. var isLongText = text.ToString().Length > 40;
  1050. if (isLongText)
  1051. {
  1052. html.ViewContext.Writer.Write(text.Substring(0, 40) + " ...");
  1053. html.ViewContext.Writer.Write(
  1054. "<a href=\"#\" onclick='showComment(\"appendix\"," + id + ",this)'><br />Anzeigen</a>");
  1055. }
  1056. else
  1057. html.ViewContext.Writer.Write(text);
  1058. if (_userContext.CurrentUser.HasFunction("Deviation-Deviations-Edit-Comment"))
  1059. html.ViewContext.Writer.Write(
  1060. (isLongText ? "&nbsp;" : "<br/>") +
  1061. "<a href=\"#\" onclick='editComment(\"appendix\"," + id + ",function() { devGridViewAppendix.PerformCallback(); })'>Bearbeiten</a>");
  1062. });
  1063. column.MinWidth = 200;
  1064. column.Width = new Unit(200, UnitType.Pixel);
  1065. });
  1066. var totalRelationOfferingToDeviationsSum = (decimal)0;
  1067. var totalRelationOfferingToDeviationsCount = 0;
  1068. var totalPercentageValueSum = (decimal)0;
  1069. var totalNegotiationValueSum = (decimal)0;
  1070. s.CustomSummaryCalculate = (sender, e) =>
  1071. {
  1072. if (e.SummaryProcess == CustomSummaryProcess.Start)
  1073. {
  1074. totalRelationOfferingToDeviationsSum = 0;
  1075. totalRelationOfferingToDeviationsCount = 0;
  1076. totalPercentageValueSum = 0;
  1077. totalNegotiationValueSum = 0;
  1078. }
  1079. if (e.SummaryProcess == CustomSummaryProcess.Calculate)
  1080. {
  1081. var relationOfferingToDeviationsVal = e.GetValue("RelationOfferingToDeviations");
  1082. if (relationOfferingToDeviationsVal != null)
  1083. {
  1084. totalRelationOfferingToDeviationsCount++;
  1085. totalRelationOfferingToDeviationsSum += Convert.ToDecimal(relationOfferingToDeviationsVal);
  1086. }
  1087. var percentageVal = e.GetValue("PercentageValue");
  1088. if (percentageVal != null)
  1089. totalPercentageValueSum += Convert.ToDecimal(percentageVal);
  1090. var negotiationVal = e.GetValue("NegotiationValue");
  1091. if (negotiationVal != null)
  1092. totalNegotiationValueSum += Convert.ToDecimal(negotiationVal);
  1093. }
  1094. if (e.SummaryProcess == CustomSummaryProcess.Finalize)
  1095. {
  1096. var summaryItem = (ASPxSummaryItem)e.Item;
  1097. if (summaryItem.FieldName == "PercentageValue")
  1098. e.TotalValue = totalPercentageValueSum;
  1099. if (summaryItem.FieldName == "NegotiationValue")
  1100. e.TotalValue = totalNegotiationValueSum;
  1101. if (summaryItem.FieldName == "RelationOfferingToDeviations")
  1102. {
  1103. if (totalRelationOfferingToDeviationsSum == 0 || totalRelationOfferingToDeviationsCount == 0)
  1104. e.TotalValue = 0;
  1105. else
  1106. e.TotalValue =
  1107. totalRelationOfferingToDeviationsSum /
  1108. (totalRelationOfferingToDeviationsCount == 0
  1109. ? 1
  1110. : totalRelationOfferingToDeviationsCount);
  1111. }
  1112. if (summaryItem.FieldName == "RelationOfferingToNegotiation")
  1113. e.TotalValue =
  1114. totalNegotiationValueSum /
  1115. (totalPercentageValueSum == 0
  1116. ? 1
  1117. : totalPercentageValueSum);
  1118. }
  1119. };
  1120. s.TotalSummary.Add(new ASPxSummaryItem
  1121. {
  1122. SummaryType = DevExpress.Data.SummaryItemType.Count,
  1123. FieldName = "Description",
  1124. DisplayFormat = "Anzahl<br/><i>{0:n0}</i>"
  1125. });
  1126. s.GroupSummary.Add(new ASPxSummaryItem
  1127. {
  1128. SummaryType = DevExpress.Data.SummaryItemType.Count,
  1129. FieldName = "Description",
  1130. DisplayFormat = "Anzahl = {0:n0}"
  1131. });
  1132. s.TotalSummary.Add(new ASPxSummaryItem
  1133. {
  1134. SummaryType = DevExpress.Data.SummaryItemType.Sum,
  1135. FieldName = "OfferingValue",
  1136. DisplayFormat = "Angeb. ∑<br/><i>{0:c2}</i>"
  1137. });
  1138. s.GroupSummary.Add(new ASPxSummaryItem
  1139. {
  1140. SummaryType = DevExpress.Data.SummaryItemType.Sum,
  1141. FieldName = "OfferingValue",
  1142. DisplayFormat = "Angeb.-∑ = {0:c2}"
  1143. });
  1144. s.TotalSummary.Add(new ASPxSummaryItem
  1145. {
  1146. FieldName = "Percentage",
  1147. SummaryType = DevExpress.Data.SummaryItemType.Average,
  1148. DisplayFormat = "Bew. Ø<br/><i>{0:p0}</i>"
  1149. });
  1150. s.GroupSummary.Add(new ASPxSummaryItem
  1151. {
  1152. FieldName = "Percentage",
  1153. SummaryType = DevExpress.Data.SummaryItemType.Average,
  1154. DisplayFormat = "Bew. Ø = <i>{0:p0}</i>"
  1155. });
  1156. s.TotalSummary.Add(new ASPxSummaryItem
  1157. {
  1158. FieldName = "PercentageValue",
  1159. SummaryType = DevExpress.Data.SummaryItemType.Custom,
  1160. DisplayFormat = "Schätz. bew. ∑<br/><i>{0:c2}</i>"
  1161. });
  1162. s.GroupSummary.Add(new ASPxSummaryItem
  1163. {
  1164. FieldName = "PercentageValue",
  1165. SummaryType = DevExpress.Data.SummaryItemType.Custom,
  1166. DisplayFormat = "Schätz. bew. ∑ = <i>{0:c2}</i>"
  1167. });
  1168. s.TotalSummary.Add(new ASPxSummaryItem
  1169. {
  1170. SummaryType = DevExpress.Data.SummaryItemType.Custom,
  1171. FieldName = "NegotiationValue",
  1172. DisplayFormat = "Verhand. ∑<br/><i>{0:c2}</i>"
  1173. });
  1174. s.GroupSummary.Add(new ASPxSummaryItem
  1175. {
  1176. SummaryType = DevExpress.Data.SummaryItemType.Custom,
  1177. FieldName = "NegotiationValue",
  1178. DisplayFormat = "Verhand.-∑ = {0:c2}"
  1179. });
  1180. s.TotalSummary.Add(new ASPxSummaryItem
  1181. {
  1182. SummaryType = DevExpress.Data.SummaryItemType.Custom,
  1183. FieldName = "RelationOfferingToNegotiation",
  1184. DisplayFormat = "Verh. Quo. Ø<br/><i>{0:p2}</i>"
  1185. });
  1186. s.GroupSummary.Add(new ASPxSummaryItem
  1187. {
  1188. SummaryType = DevExpress.Data.SummaryItemType.Custom,
  1189. FieldName = "RelationOfferingToNegotiation",
  1190. DisplayFormat = "Verh. Quo. Ø = {0:p2}"
  1191. });
  1192. s.TotalSummary.Add(new ASPxSummaryItem
  1193. {
  1194. SummaryType = DevExpress.Data.SummaryItemType.Custom,
  1195. FieldName = "RelationOfferingToDeviations",
  1196. DisplayFormat = "Fak. A./VA Ø<br/><i>{0:n2}</i>"
  1197. });
  1198. s.GroupSummary.Add(new ASPxSummaryItem
  1199. {
  1200. SummaryType = DevExpress.Data.SummaryItemType.Custom,
  1201. FieldName = "RelationOfferingToDeviations",
  1202. DisplayFormat = "Fak. A./VA Ø = {0:n2}"
  1203. });
  1204. s.HtmlRowPrepared = (sender, e) =>
  1205. {
  1206. var state = e.GetValue("State") as StateDataModel;
  1207. if (e.RowType == GridViewRowType.Data && state != null && !state.IsDefault)
  1208. e.Row.BackColor = System.Drawing.ColorTranslator.FromHtml(state.HexColor);
  1209. };
  1210. s.ClientLayout = (sender, e) =>
  1211. {
  1212. if (e.LayoutMode == ClientLayoutMode.Loading)
  1213. {
  1214. if (System.Web.HttpContext.Current.Session["AppendixGridState"] != null)
  1215. e.LayoutData = (string)System.Web.HttpContext.Current.Session["AppendixGridState"];
  1216. else
  1217. {
  1218. var userConfigItem = _configurationService.GetUserConfigItemByNameAndUserId("AppendixGridLayoutState",
  1219. _userContext.CurrentUser.Id);
  1220. if (userConfigItem != null)
  1221. {
  1222. System.Web.HttpContext.Current.Session["AppendixGridState"] = userConfigItem.Value;
  1223. e.LayoutData = (string)System.Web.HttpContext.Current.Session["AppendixGridState"];
  1224. }
  1225. else
  1226. ((MVCxGridView)sender).SortBy(((MVCxGridView)sender).Columns[0], ColumnSortOrder.Ascending);
  1227. }
  1228. }
  1229. else
  1230. {
  1231. System.Web.HttpContext.Current.Session["AppendixGridState"] = e.LayoutData;
  1232. _configurationService.InsertOrUpdateUserConfigItem(new Core.Domain.Config.UserConfigItem
  1233. {
  1234. UserId = _userContext.CurrentUser.Id,
  1235. Name = "AppendixGridLayoutState",
  1236. Value = e.LayoutData
  1237. });
  1238. }
  1239. };
  1240. s.PreRender = s.BeforeGetCallbackResult = (sender, e) => {
  1241. MVCxGridView gridView = sender as MVCxGridView;
  1242. System.Web.HttpContext.Current.Session["AppendixGridViewState"] = new MVCxGridViewState(gridView);
  1243. };
  1244. s.CustomColumnSort = (sender, e) =>
  1245. {
  1246. if (e.Column.FieldName != "CustomNumber") return;
  1247. int.TryParse(e.GetRow1Value("CustomNumber").ToString(), out int rowVal1);
  1248. int.TryParse(e.GetRow2Value("CustomNumber").ToString(), out int rowVal2);
  1249. e.Result = (rowVal1).CompareTo(rowVal2);
  1250. e.Handled = true;
  1251. };
  1252. s.ClientSideEvents.BeginCallback = "function (s, e) { e.customArgs['scrollHeight'] = [ gridScrollHeight ]; }";
  1253. s.ClientSideEvents.ToolbarItemClick = "function (s, e) { onToolbarItemClick(s, e); }";
  1254. s.ClientSideEvents.ColumnResized = "function (s, e) { setGridScrollHeight(); }";
  1255. //s.Styles.AlternatingRow.BackColor = System.Drawing.Color.FromArgb(247, 247, 247);
  1256. s.Styles.Footer.CssClass += "devExGridFooterPanel";
  1257. s.Styles.GroupRow.CssClass += "devExGridGroupRow";
  1258. return s;
  1259. }
  1260. /// <summary>
  1261. /// Creates GridViewSettings for the mailNotifications gridView
  1262. /// </summary>
  1263. /// <param name="html">Current HtmlHelper context.</param>
  1264. public static GridViewSettings MailNotificationGridViewSettings(this System.Web.Mvc.HtmlHelper html)
  1265. {
  1266. var s = new GridViewSettings();
  1267. s.Name = "devGridViewMailNotifications";
  1268. s.KeyFieldName = "Id";
  1269. s.CallbackRouteValues = new { Controller = "Misc", Action = "PartialMailNotifications" };
  1270. s.Width = Unit.Percentage(99);
  1271. s.Settings.ShowHeaderFilterButton = true;
  1272. s.Settings.ShowFilterRow = true;
  1273. s.Settings.ShowFilterRowMenu = true;
  1274. s.Settings.ShowFooter = true;
  1275. s.Settings.ShowGroupPanel = true;
  1276. s.Settings.AutoFilterCondition = AutoFilterCondition.Contains;
  1277. s.Settings.HorizontalScrollBarMode = ScrollBarMode.Auto;
  1278. s.Settings.VerticalScrollBarMode = ScrollBarMode.Auto;
  1279. s.Settings.VerticalScrollableHeight =
  1280. (html.ViewData["ScrollHeight"] == null || (int)html.ViewData["ScrollHeight"] == -1)
  1281. ? 400
  1282. : (int)html.ViewData["ScrollHeight"];
  1283. s.SettingsExport.Landscape = true;
  1284. s.SettingsExport.FileName = "Benachrichtigungsliste";
  1285. s.SettingsPopup.CustomizationWindow.Width = new Unit(250, UnitType.Pixel);
  1286. s.SettingsPopup.CustomizationWindow.Height = new Unit(350, UnitType.Pixel);
  1287. s.SettingsPopup.HeaderFilter.Width = new Unit(353, UnitType.Pixel);
  1288. s.SettingsPopup.HeaderFilter.Height = new Unit(360, UnitType.Pixel);
  1289. s.SettingsBehavior.EnableCustomizationWindow = true;
  1290. s.SettingsBehavior.AllowHeaderFilter = true;
  1291. s.SettingsPager.AlwaysShowPager = true;
  1292. s.SettingsResizing.ColumnResizeMode = ColumnResizeMode.Control;
  1293. s.SettingsPager.Position = PagerPosition.Bottom;
  1294. s.SettingsPager.PageSizeItemSettings.Visible = true;
  1295. s.SettingsPager.FirstPageButton.Visible = true;
  1296. s.SettingsPager.LastPageButton.Visible = true;
  1297. s.SettingsPager.NumericButtonCount = 5;
  1298. s.Toolbars.Add(t =>
  1299. {
  1300. var refreshItem = t.Items.Add(GridViewToolbarCommand.Refresh);
  1301. refreshItem.Text = "Aktualisieren";
  1302. var filterItem = t.Items.Add(GridViewToolbarCommand.ClearFilter);
  1303. filterItem.Text = "Filter entfernen";
  1304. t.Items.Add(i =>
  1305. {
  1306. i.Text = "Spalten anzeigen / ausblenden";
  1307. i.Name = "ToggleColumnChooser";
  1308. i.Image.IconID = IconID.OtherViewgridlines16x16gray;
  1309. i.BeginGroup = true;
  1310. });
  1311. t.Items.Add(i =>
  1312. {
  1313. i.Text = "Zurücksetzen";
  1314. i.Name = "ResetSettings";
  1315. i.Image.IconID = IconID.ActionsReset16x16;
  1316. i.BeginGroup = true;
  1317. });
  1318. });
  1319. if (_userContext.CurrentUser.HasFunction("Misc-MailNotifications-Edit"))
  1320. {
  1321. s.Columns.Add(column =>
  1322. {
  1323. column.Caption = "#";
  1324. column.SetDataItemTemplateContent(c =>
  1325. {
  1326. html.ViewContext.Writer.Write(
  1327. "<a href=\"#\" onclick=\"editMailNotification(" + DataBinder.Eval(c.DataItem, "Id") + ")\">Bearbeiten</a>&nbsp;");
  1328. html.ViewContext.Writer.Write(
  1329. "<a href=\"#\" onclick=\"confirmDelete(" + DataBinder.Eval(c.DataItem, "Id") + ")\">Löschen</a><br />");
  1330. html.ViewContext.Writer.Write(
  1331. "<a href=\"#\" onclick=\"confirmProcess(" + DataBinder.Eval(c.DataItem, "Id") + ")\">Sofort ausführen</a>");
  1332. });
  1333. column.SetHeaderTemplateContent(c =>
  1334. {
  1335. html.ViewContext.Writer.Write(
  1336. "<a href=\"#\" onclick=\"editMailNotification(-1)\">Neu</a>&nbsp;");
  1337. });
  1338. column.Settings.AllowDragDrop = DefaultBoolean.False;
  1339. column.Settings.AllowSort = DefaultBoolean.False;
  1340. column.Width = new Unit(150, UnitType.Pixel);
  1341. });
  1342. }
  1343. s.Columns.Add(column =>
  1344. {
  1345. column.Caption = "Zeitplan";
  1346. column.FieldName = "CronExpressionDescription";
  1347. column.MinWidth = 200;
  1348. column.Width = new Unit(200, UnitType.Pixel);
  1349. });
  1350. s.Columns.Add(column =>
  1351. {
  1352. column.Caption = "Benachrichtigungs-Plugin";
  1353. column.FieldName = "NotificationPluginSystemNameDescription";
  1354. column.Width = new Unit(180, UnitType.Pixel);
  1355. });
  1356. s.Columns.Add(column =>
  1357. {
  1358. column.Caption = "Benachrichtigungs-Job";
  1359. column.FieldName = "NotificationJobSystemNameDescription";
  1360. column.PropertiesEdit.DisplayFormatString = "dd.MM.yyyy";
  1361. column.MinWidth = 180;
  1362. column.Width = new Unit(180, UnitType.Pixel);
  1363. });
  1364. s.Columns.Add(column =>
  1365. {
  1366. column.Caption = "Mitarbeiter";
  1367. column.FieldName = "UserDescriptions";
  1368. column.MinWidth = 150;
  1369. column.Width = new Unit(200, UnitType.Pixel);
  1370. column.SetDataItemTemplateContent(c =>
  1371. {
  1372. var userDescriptions = DataBinder.Eval(c.DataItem, "UserDescriptions") as List<string>;
  1373. if (userDescriptions != null)
  1374. {
  1375. foreach (var description in userDescriptions)
  1376. {
  1377. var split = description.Split('|');
  1378. if (split.Length > 1)
  1379. html.ViewContext.Writer.Write(
  1380. "<span style=\"float: left\">" + split[0] + "</span>" +
  1381. "<span style=\"float: right\">" + split[1] + "</span><br />");
  1382. else
  1383. html.ViewContext.Writer.Write(
  1384. "<span>" + split[0] + "</span><br />");
  1385. }
  1386. }
  1387. });
  1388. });
  1389. s.Columns.Add(column =>
  1390. {
  1391. column.Caption = "Nächste Ausführung";
  1392. column.FieldName = "NextExecutionTime";
  1393. column.PropertiesEdit.DisplayFormatString = "dd.MM.yyyy";
  1394. column.MinWidth = 110;
  1395. column.Width = new Unit(150, UnitType.Pixel);
  1396. });
  1397. s.ClientLayout = (sender, e) =>
  1398. {
  1399. if (e.LayoutMode == ClientLayoutMode.Loading)
  1400. {
  1401. if (System.Web.HttpContext.Current.Session["MailNotificationsGridState"] != null)
  1402. e.LayoutData = (string)System.Web.HttpContext.Current.Session["MailNotificationsGridState"];
  1403. else
  1404. {
  1405. var userConfigItem = _configurationService.GetUserConfigItemByNameAndUserId("MailNotificationsGridLayoutState",
  1406. _userContext.CurrentUser.Id);
  1407. if (userConfigItem != null)
  1408. {
  1409. System.Web.HttpContext.Current.Session["MailNotificationsGridState"] = userConfigItem.Value;
  1410. e.LayoutData = (string)System.Web.HttpContext.Current.Session["MailNotificationsGridState"];
  1411. }
  1412. }
  1413. }
  1414. else
  1415. {
  1416. System.Web.HttpContext.Current.Session["MailNotificationsGridState"] = e.LayoutData;
  1417. _configurationService.InsertOrUpdateUserConfigItem(new Core.Domain.Config.UserConfigItem
  1418. {
  1419. UserId = _userContext.CurrentUser.Id,
  1420. Name = "MailNotificationsGridLayoutState",
  1421. Value = e.LayoutData
  1422. });
  1423. }
  1424. };
  1425. s.ClientSideEvents.BeginCallback = "function (s, e) { e.customArgs['scrollHeight'] = [ gridScrollHeight ]; }";
  1426. s.ClientSideEvents.ToolbarItemClick = "function (s, e) { onToolbarItemClick(s, e); }";
  1427. s.Styles.AlternatingRow.BackColor = System.Drawing.Color.FromArgb(247, 247, 247);
  1428. return s;
  1429. }
  1430. /// <summary>
  1431. /// Creates GridViewSettings for the logs gridView
  1432. /// </summary>
  1433. /// <param name="html">Current HtmlHelper context.</param>
  1434. public static GridViewSettings LogGridViewSettings(this System.Web.Mvc.HtmlHelper html)
  1435. {
  1436. var s = new GridViewSettings();
  1437. s.Name = "devGridViewLog";
  1438. s.KeyFieldName = "Id";
  1439. s.CallbackRouteValues = new { Controller = "Misc", Action = "PartialLogs" };
  1440. s.Width = Unit.Percentage(99);
  1441. s.Settings.ShowHeaderFilterButton = true;
  1442. s.Settings.ShowFilterRow = true;
  1443. s.Settings.ShowFilterRowMenu = true;
  1444. s.Settings.ShowFooter = true;
  1445. s.Settings.ShowGroupPanel = true;
  1446. s.Settings.AutoFilterCondition = AutoFilterCondition.Contains;
  1447. s.Settings.HorizontalScrollBarMode = ScrollBarMode.Auto;
  1448. s.Settings.VerticalScrollBarMode = ScrollBarMode.Auto;
  1449. s.Settings.VerticalScrollableHeight =
  1450. (html.ViewData["ScrollHeight"] == null || (int)html.ViewData["ScrollHeight"] == -1)
  1451. ? 400
  1452. : (int)html.ViewData["ScrollHeight"];
  1453. s.SettingsExport.Landscape = true;
  1454. s.SettingsExport.FileName = "Logliste";
  1455. s.SettingsPopup.CustomizationWindow.Width = new Unit(250, UnitType.Pixel);
  1456. s.SettingsPopup.CustomizationWindow.Height = new Unit(350, UnitType.Pixel);
  1457. s.SettingsPopup.HeaderFilter.Width = new Unit(353, UnitType.Pixel);
  1458. s.SettingsPopup.HeaderFilter.Height = new Unit(360, UnitType.Pixel);
  1459. s.SettingsBehavior.EnableCustomizationWindow = true;
  1460. s.SettingsBehavior.AllowHeaderFilter = true;
  1461. s.SettingsPager.AlwaysShowPager = true;
  1462. s.SettingsResizing.ColumnResizeMode = ColumnResizeMode.Control;
  1463. s.SettingsPager.Position = PagerPosition.Bottom;
  1464. s.SettingsPager.PageSizeItemSettings.Visible = true;
  1465. s.SettingsPager.FirstPageButton.Visible = true;
  1466. s.SettingsPager.LastPageButton.Visible = true;
  1467. s.SettingsPager.NumericButtonCount = 5;
  1468. s.Toolbars.Add(t =>
  1469. {
  1470. var refreshItem = t.Items.Add(GridViewToolbarCommand.Refresh);
  1471. refreshItem.Text = "Aktualisieren";
  1472. var filterItem = t.Items.Add(GridViewToolbarCommand.ClearFilter);
  1473. filterItem.Text = "Filter entfernen";
  1474. t.Items.Add(i =>
  1475. {
  1476. i.Text = "Spalten anzeigen / ausblenden";
  1477. i.Name = "ToggleColumnChooser";
  1478. i.Image.IconID = IconID.OtherViewgridlines16x16gray;
  1479. i.BeginGroup = true;
  1480. });
  1481. t.Items.Add(i =>
  1482. {
  1483. i.Text = "Drucken";
  1484. i.Name = "Print";
  1485. i.Image.IconID = IconID.PrintDefaultprinter16x16;
  1486. i.BeginGroup = true;
  1487. });
  1488. t.Items.Add(i =>
  1489. {
  1490. i.Text = "Zurücksetzen";
  1491. i.Name = "ResetSettings";
  1492. i.Image.IconID = IconID.ActionsReset16x16;
  1493. i.BeginGroup = true;
  1494. });
  1495. });
  1496. s.Columns.Add(column =>
  1497. {
  1498. column.Caption = "#";
  1499. column.SetDataItemTemplateContent(c =>
  1500. {
  1501. html.ViewContext.Writer.Write(
  1502. "<a href=\"#\" onclick=\"viewLog(" + DataBinder.Eval(c.DataItem, "Id") + ")\">Betrachten</a>&nbsp;");
  1503. if (_userContext.CurrentUser.HasFunction("Misc-Logs-Delete"))
  1504. {
  1505. html.ViewContext.Writer.Write(
  1506. "<a href=\"#\" onclick=\"deleteLog(" + DataBinder.Eval(c.DataItem, "Id") + ")\">Löschen</a><br />");
  1507. }
  1508. });
  1509. column.Settings.AllowDragDrop = DefaultBoolean.False;
  1510. column.Settings.AllowSort = DefaultBoolean.False;
  1511. column.MinWidth = 100;
  1512. column.Width = new Unit(120, UnitType.Pixel);
  1513. });
  1514. s.Columns.Add(column =>
  1515. {
  1516. column.Caption = "Level";
  1517. column.FieldName = "LogLevelDescription";
  1518. column.MinWidth = 100;
  1519. column.Width = new Unit(100, UnitType.Pixel);
  1520. column.SettingsHeaderFilter.Mode = GridHeaderFilterMode.CheckedList;
  1521. });
  1522. s.Columns.Add(column =>
  1523. {
  1524. column.Caption = "Betreff";
  1525. column.FieldName = "ShortMessage";
  1526. column.MinWidth = 150;
  1527. column.Width = new Unit(150, UnitType.Pixel);
  1528. column.SettingsHeaderFilter.Mode = GridHeaderFilterMode.CheckedList;
  1529. });
  1530. s.Columns.Add(column =>
  1531. {
  1532. column.Caption = "Nachricht";
  1533. column.FieldName = "FullMessage";
  1534. column.MinWidth = 200;
  1535. column.Width = new Unit(200, UnitType.Pixel);
  1536. column.SetDataItemTemplateContent(c =>
  1537. {
  1538. var fullMessage = DataBinder.Eval(c.DataItem, "FullMessage");
  1539. var text = fullMessage == null
  1540. ? String.Empty
  1541. : fullMessage.ToString();
  1542. if (text.ToString().Length > 80)
  1543. html.ViewContext.Writer.Write(text.Substring(0, 80) + " ...");
  1544. else
  1545. html.ViewContext.Writer.Write(text);
  1546. });
  1547. });
  1548. s.Columns.Add(column =>
  1549. {
  1550. column.Caption = "IP-Adresse";
  1551. column.FieldName = "IpAddress";
  1552. column.MinWidth = 130;
  1553. column.Width = new Unit(130, UnitType.Pixel);
  1554. column.SettingsHeaderFilter.Mode = GridHeaderFilterMode.CheckedList;
  1555. });
  1556. s.Columns.Add(column =>
  1557. {
  1558. column.Caption = "Mitarbeiter";
  1559. column.FieldName = "UserDescription";
  1560. column.MinWidth = 130;
  1561. column.Width = new Unit(130, UnitType.Pixel);
  1562. column.SettingsHeaderFilter.Mode = GridHeaderFilterMode.CheckedList;
  1563. });
  1564. s.Columns.Add(column =>
  1565. {
  1566. column.Caption = "Datentyp";
  1567. column.FieldName = "EntityType";
  1568. column.MinWidth = 100;
  1569. column.Width = new Unit(100, UnitType.Pixel);
  1570. column.SettingsHeaderFilter.Mode = GridHeaderFilterMode.CheckedList;
  1571. });
  1572. s.Columns.Add(column =>
  1573. {
  1574. column.Caption = "Daten ID";
  1575. column.FieldName = "EntityId";
  1576. column.MinWidth = 100;
  1577. column.Width = new Unit(100, UnitType.Pixel);
  1578. column.SettingsHeaderFilter.Mode = GridHeaderFilterMode.CheckedList;
  1579. });
  1580. s.Columns.Add(column =>
  1581. {
  1582. column.Caption = "Seiten URL";
  1583. column.FieldName = "PageUrl";
  1584. column.MinWidth = 150;
  1585. column.Width = new Unit(150, UnitType.Pixel);
  1586. column.Visible = false;
  1587. });
  1588. s.Columns.Add(column =>
  1589. {
  1590. column.Caption = "Relative URL";
  1591. column.FieldName = "ReferrerUrl";
  1592. column.MinWidth = 100;
  1593. column.Width = new Unit(100, UnitType.Pixel);
  1594. column.Visible = false;
  1595. });
  1596. s.Columns.Add(column =>
  1597. {
  1598. column.Caption = "Zeitpunkt";
  1599. column.FieldName = "CreatedOnLocal";
  1600. column.PropertiesEdit.DisplayFormatString = "dd.MM.yyyy - HH:mm:ss";
  1601. column.MinWidth = 150;
  1602. column.Width = new Unit(150, UnitType.Pixel);
  1603. });
  1604. s.ClientLayout = (sender, e) =>
  1605. {
  1606. if (e.LayoutMode == ClientLayoutMode.Loading)
  1607. {
  1608. if (System.Web.HttpContext.Current.Session["LogGridState"] != null)
  1609. e.LayoutData = (string)System.Web.HttpContext.Current.Session["LogGridState"];
  1610. else
  1611. {
  1612. var userConfigItem = _configurationService.GetUserConfigItemByNameAndUserId("LogGridLayoutState",
  1613. _userContext.CurrentUser.Id);
  1614. if (userConfigItem != null)
  1615. {
  1616. System.Web.HttpContext.Current.Session["LogGridState"] = userConfigItem.Value;
  1617. e.LayoutData = (string)System.Web.HttpContext.Current.Session["LogGridState"];
  1618. }
  1619. }
  1620. }
  1621. else
  1622. {
  1623. System.Web.HttpContext.Current.Session["LogGridState"] = e.LayoutData;
  1624. _configurationService.InsertOrUpdateUserConfigItem(new Core.Domain.Config.UserConfigItem
  1625. {
  1626. UserId = _userContext.CurrentUser.Id,
  1627. Name = "LogGridLayoutState",
  1628. Value = e.LayoutData
  1629. });
  1630. }
  1631. };
  1632. s.PreRender = s.BeforeGetCallbackResult = (sender, e) => {
  1633. MVCxGridView gridView = sender as MVCxGridView;
  1634. System.Web.HttpContext.Current.Session["LogGridViewState"] = new MVCxGridViewState(gridView);
  1635. };
  1636. s.ClientSideEvents.BeginCallback = "function (s, e) { e.customArgs['scrollHeight'] = [ gridScrollHeight ]; }";
  1637. s.ClientSideEvents.ToolbarItemClick = "function (s, e) { onToolbarItemClick(s, e); }";
  1638. s.Styles.AlternatingRow.BackColor = System.Drawing.Color.FromArgb(247, 247, 247);
  1639. return s;
  1640. }
  1641. }
  1642. }