GridViewSettingsHelper.cs 83 KB

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