GridViewSettingsHelper.cs 66 KB

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