GridViewSettingsHelper.cs 82 KB

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