GridViewSettingsHelper.cs 66 KB

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