GridViewSettingsHelper.cs 78 KB

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