GridViewSettingsHelper.cs 79 KB

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