Sfoglia il codice sorgente

Reporting zu 98% abgeschlossen!

Arne Diekmann 8 anni fa
parent
commit
fa144fb61d

+ 1 - 1
GreenTree.Nachtragsmanagement.Data/AppendixObjectContext.cs

@@ -86,7 +86,7 @@ namespace GreenTree.Nachtragsmanagement.Data
             //Database.SetInitializer(new CreateDatabaseIfNotExists<AppendixObjectContext>());
             Database.SetInitializer(new DropCreateDatabaseIfModelChanges<AppendixObjectContext>());
 
-            //Database.CreateIfNotExists();
+            Database.CreateIfNotExists();
 
             ((IObjectContextAdapter)this).ObjectContext.ContextOptions.LazyLoadingEnabled = true;
 

+ 13 - 8
GreenTree.Nachtragsmanagement.Web/App_Start/FunctionConfig.cs

@@ -86,7 +86,8 @@ namespace GreenTree.Nachtragsmanagement.Web.App_Start
                     MinWidth = 600,
                     BaseHeight = 600,
                     MinHeight = 400,
-                    AllowMaximize = true
+                    AllowMaximize = true,
+                    MaximizedOnStart = true
                 },
                 new Function
                 {
@@ -109,7 +110,8 @@ namespace GreenTree.Nachtragsmanagement.Web.App_Start
                     MinWidth = 600,
                     BaseHeight = 500,
                     MinHeight = 400,
-                    AllowMaximize = true
+                    AllowMaximize = true,
+                    MaximizedOnStart = true
                 },
                 new Function
                 {
@@ -132,7 +134,8 @@ namespace GreenTree.Nachtragsmanagement.Web.App_Start
                     MinWidth = 500,
                     BaseHeight = 450,
                     MinHeight = 300,
-                    AllowMaximize = true
+                    AllowMaximize = true,
+                    MaximizedOnStart = true
                 },
                 new Function
                 {
@@ -227,7 +230,8 @@ namespace GreenTree.Nachtragsmanagement.Web.App_Start
                     MinWidth = 600,
                     BaseHeight = 500,
                     MinHeight = 350,
-                    AllowMaximize = true
+                    AllowMaximize = true,
+                    MaximizedOnStart = false
                 },
                 new Function
                 {
@@ -282,7 +286,8 @@ namespace GreenTree.Nachtragsmanagement.Web.App_Start
                     MinWidth = 600,
                     BaseHeight = 500,
                     MinHeight = 350,
-                    AllowMaximize = true
+                    AllowMaximize = true,
+                    MaximizedOnStart = false
                 },
                 new Function
                 {
@@ -314,7 +319,7 @@ namespace GreenTree.Nachtragsmanagement.Web.App_Start
                     BaseHeight = 550,
                     MinHeight = 450,
                     AllowMaximize = true,
-                    MaximizedOnStart = false
+                    MaximizedOnStart = true
                 },
                 new Function
                 {
@@ -338,7 +343,7 @@ namespace GreenTree.Nachtragsmanagement.Web.App_Start
                     BaseHeight = 550,
                     MinHeight = 450,
                     AllowMaximize = true,
-                    MaximizedOnStart = false
+                    MaximizedOnStart = true
                 },
                 new Function
                 {
@@ -362,7 +367,7 @@ namespace GreenTree.Nachtragsmanagement.Web.App_Start
                     BaseHeight = 550,
                     MinHeight = 450,
                     AllowMaximize = true,
-                    MaximizedOnStart = false
+                    MaximizedOnStart = true
                 },
                 new Function
                 {

+ 30 - 12
GreenTree.Nachtragsmanagement.Web/Controllers/AppendixController.cs

@@ -17,6 +17,7 @@ using System;
 using System.Collections.Generic;
 using System.Drawing;
 using System.Linq;
+using System.Net.Mime;
 using System.Web;
 using System.Web.Mvc;
 using static GreenTree.Nachtragsmanagement.Web.Extensions.MVCxGridViewGeneratorHelper;
@@ -128,34 +129,40 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
             MVCxGridViewState gridViewState = (MVCxGridViewState)Session["AppendixGridViewState"];
 
+            var settings = GridViewSettingsHelper.AppendixGridViewSettings(htmlHelper);
+
             if (gridViewState != null)
             {
                 var generator = new MVCReportGeneratonHelper();
 
                 generator.CustomizeColumnsCollection += new CustomizeColumnsCollectionEventHandler(generator_CustomizeColumnsCollection);
-                generator.CustomizeColumnSummary += new CustomizeColumnSummaryEventHandler(generator_CustomizeColumnSummary);
+                generator.CustomizeGroupColumnSummary += new CustomizeColumnGroupSummaryEventHandler(generator_CustomizeGroupColumnSummary);
+                generator.CustomizeTotalColumnSummary += new CustomizeColumnTotalSummaryEventHandler(generator_CustomizeTotalColumnSummary);
 
                 var report = generator.GenerateMVCReport(gridViewState, appendixModels);
 
                 if (displayMode == "popup")
-                    return PartialView("~/Views/Shared/_PrintPopupPartial.cshtml", new PrintGridModel { Report = report });
+                    return PartialView("~/Views/Shared/_PrintPopupPartial.cshtml",
+                        new PrintGridModel(report, "Appendix", "ExportPartialAppendices", "devGridViewAppendix"));
                 else if (displayMode == "callback")
-                    return PartialView("~/Views/Shared/_PrintDocumentViewerPartial.cshtml", new PrintGridModel { Report = report });
+                    return PartialView("~/Views/Shared/_PrintDocumentViewerPartial.cshtml",
+                        new PrintGridModel(report, "Appendix", "ExportPartialAppendices", "devGridViewAppendix"));
                 else if (displayMode == "export")
                 {
                     switch (exportformat.ToLower())
                     {
                         case "xlsx":
-                            generator.WriteXlsxToResponse(Response, "test.xlsx", 
-                                System.Net.Mime.DispositionTypeNames.Attachment.ToString());
-                            break;
+                            settings.TotalSummary["OfferingValue"].DisplayFormat = "{0:c2}";
+                            settings.TotalSummary["NegotiationValue"].DisplayFormat = "{0:c2}";
+                            settings.TotalSummary["Description"].DisplayFormat = "Anzahl = {0:n0}";
+                            return GridViewExtension.ExportToXlsx(settings, appendixModels);
                         case "xls":
-                            generator.WriteXlsToResponse(Response, "test.xls", 
-                                System.Net.Mime.DispositionTypeNames.Attachment.ToString());
-                            break;
+                            settings.TotalSummary["OfferingValue"].DisplayFormat = "{0:c2}";
+                            settings.TotalSummary["NegotiationValue"].DisplayFormat = "{0:c2}";
+                            settings.TotalSummary["Description"].DisplayFormat = "Anzahl = {0:n0}";
+                            return GridViewExtension.ExportToXls(settings, appendixModels);
                         case "pdf":
-                            generator.WritePdfToResponse(Response, "test.pdf", 
-                                System.Net.Mime.DispositionTypeNames.Attachment.ToString());
+                            generator.WritePdfToResponse(Response, "Nachtragsliste.pdf", DispositionTypeNames.Attachment.ToString());
                             break;
                     }
                 }
@@ -179,13 +186,24 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
                 if (column.FieldName == "RelationOfferingToNegotiation") { column.ColumnWidth = 70; }
                 if (column.FieldName == "RelationOfferingToDeviations") { column.ColumnWidth = 80; }
                 if (column.FieldName == "StateDescription") { column.ColumnWidth = 60; }
+                if (column.FieldName == "Comment") { column.IsVisible = false; column.IsDetail = true; }
             }
         }
 
         /// <summary>
         /// Customize column summary
         /// </summary>
-        private void generator_CustomizeColumnSummary(object source, ColumnSummaryCreationEventArgs e)
+        private void generator_CustomizeGroupColumnSummary(object source, ColumnSummaryCreationEventArgs e)
+        {
+            if (e.FieldName == "OfferingValue") { e.Summary.FormatString = "Angeb. ∑ = {0:c2}"; }
+            if (e.FieldName == "NegotiationValue") { e.Summary.FormatString = "Verhand. ∑ = {0:c2}"; }
+            if (e.FieldName == "Description") { e.Summary.FormatString = "Alle = {0:n0}"; }
+        }
+
+        /// <summary>
+        /// Customize column summary
+        /// </summary>
+        private void generator_CustomizeTotalColumnSummary(object source, ColumnSummaryCreationEventArgs e)
         {
             if (e.FieldName == "OfferingValue") { e.Summary.FormatString = "{0:c2}"; }
             if (e.FieldName == "NegotiationValue") { e.Summary.FormatString = "{0:c2}"; }

+ 89 - 13
GreenTree.Nachtragsmanagement.Web/Controllers/DeviationController.cs

@@ -7,6 +7,7 @@ using GreenTree.Nachtragsmanagement.Services.Appendix;
 using GreenTree.Nachtragsmanagement.Services.Deviation;
 using GreenTree.Nachtragsmanagement.Services.Logging;
 using GreenTree.Nachtragsmanagement.Services.Site;
+using GreenTree.Nachtragsmanagement.Web.Extensions;
 using GreenTree.Nachtragsmanagement.Web.Framework.Authorization;
 using GreenTree.Nachtragsmanagement.Web.Models.Deviation;
 using GreenTree.Nachtragsmanagement.Web.Models.Global;
@@ -14,8 +15,10 @@ using Newtonsoft.Json;
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Net.Mime;
 using System.Web;
 using System.Web.Mvc;
+using static GreenTree.Nachtragsmanagement.Web.Extensions.MVCxGridViewGeneratorHelper;
 
 namespace GreenTree.Nachtragsmanagement.Web.Controllers
 {
@@ -108,9 +111,9 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
         /// Export result for deviation grid
         /// </summary>
         [HttpPost]
-        public ActionResult ExportPartialDeviations(GridViewExportFormat exportformat)
+        public ActionResult ExportPartialDeviations(string displayMode, string exportformat)
         {
-            if (exportformat == null || String.IsNullOrEmpty(exportformat.Format))
+            if (String.IsNullOrEmpty(displayMode))
                 return new EmptyResult();
 
             var currentUser = _userHelper.FromCookies();
@@ -122,23 +125,96 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
             var viewContext = new ViewContext();
             var viewPage = new ViewPage();
-            var htmlHelper = new HtmlHelper(viewContext, viewPage);
+            var htmlHelper = new System.Web.Mvc.HtmlHelper(viewContext, viewPage);
 
-            var gridViewSettings = Extensions.GridViewSettingsHelper.DeviationGridViewSettings(htmlHelper);
+            MVCxGridViewState gridViewState = (MVCxGridViewState)Session["DeviationGridViewState"];
 
-            switch (exportformat.Format.ToLower())
+            var settings = GridViewSettingsHelper.DeviationGridViewSettings(htmlHelper);
+
+            if (gridViewState != null)
             {
-                case "xlsx":
-                    return GridViewExtension.ExportToXlsx(gridViewSettings, deviationModels);
-                case "xls":
-                    return GridViewExtension.ExportToXls(gridViewSettings, deviationModels);
-                case "pdf":
-                    return GridViewExtension.ExportToPdf(gridViewSettings, deviationModels);
-                default:
-                    return new EmptyResult();
+                var generator = new MVCReportGeneratonHelper();
+
+                generator.CustomizeColumnsCollection += new CustomizeColumnsCollectionEventHandler(generator_CustomizeColumnsCollection);
+                generator.CustomizeGroupColumnSummary += new CustomizeColumnGroupSummaryEventHandler(generator_CustomizeGroupColumnSummary);
+                generator.CustomizeTotalColumnSummary += new CustomizeColumnTotalSummaryEventHandler(generator_CustomizeTotalColumnSummary);
+
+                var report = generator.GenerateMVCReport(gridViewState, deviationModels);
+
+                if (displayMode == "popup")
+                    return PartialView("~/Views/Shared/_PrintPopupPartial.cshtml",
+                        new PrintGridModel(report, "Deviation", "ExportPartialDeviations", "devGridViewDeviation"));
+                else if (displayMode == "callback")
+                    return PartialView("~/Views/Shared/_PrintDocumentViewerPartial.cshtml",
+                        new PrintGridModel(report, "Deviation", "ExportPartialDeviations", "devGridViewDeviation"));
+                else if (displayMode == "export")
+                {
+                    switch (exportformat.ToLower())
+                    {
+                        case "xlsx":
+                            settings.TotalSummary["Value"].DisplayFormat = "{0:c2}";
+                            settings.TotalSummary["Percentage"].DisplayFormat = "{0:p0}";
+                            settings.TotalSummary["PercentageValue"].DisplayFormat = "{0:c2}";
+                            settings.TotalSummary["DaysReceiptToAppendixOffering"].DisplayFormat = "Schnitt = {0:n0}";
+                            settings.TotalSummary["Description"].DisplayFormat = "Anzahl = {0:n0}";
+                            return GridViewExtension.ExportToXlsx(settings, deviationModels);
+                        case "xls":
+                            settings.TotalSummary["Value"].DisplayFormat = "{0:c2}";
+                            settings.TotalSummary["Percentage"].DisplayFormat = "{0:p0}";
+                            settings.TotalSummary["DaysReceiptToAppendixOffering"].DisplayFormat = "Schnitt = {0:n0}";
+                            settings.TotalSummary["Description"].DisplayFormat = "Anzahl = {0:n0}";
+                            return GridViewExtension.ExportToXls(settings, deviationModels);
+                        case "pdf":
+                            generator.WritePdfToResponse(Response, "VA-Liste.pdf", DispositionTypeNames.Attachment.ToString());
+                            break;
+                    }
+                }
+
+                return new EmptyResult();
+            }
+            else
+                return new EmptyResult();
+        }
+
+        /// <summary>
+        /// Customize created columns
+        /// </summary>
+        private void generator_CustomizeColumnsCollection(object source, ColumnsCreationEventArgs e)
+        {
+            foreach (var column in e.ColumnsInfo)
+            {
+                if (column.FieldName == "CustomNumber") { column.ColumnWidth = 30; }
+                if (column.FieldName == "SiteDescription") { column.ColumnWidth = 60; }
+                if (column.FieldName == "AppendixDescription") { column.ColumnWidth = 50; }
+                if (column.FieldName == "StatusDescription") { column.ColumnWidth = 60; }
+                if (column.FieldName == "Comment") { column.IsVisible = false; column.IsDetail = true; }
             }
         }
 
+        /// <summary>
+        /// Customize column summary
+        /// </summary>
+        private void generator_CustomizeGroupColumnSummary(object source, ColumnSummaryCreationEventArgs e)
+        {
+            if (e.FieldName == "Value") { e.Summary.FormatString = "Schätzung ∑ = {0:c2}"; }
+            if (e.FieldName == "Percentage") { e.Summary.FormatString = "Bew. Ø = {0:p0}"; }
+            if (e.FieldName == "PercentageValue") { e.Summary.FormatString = "S. Bew. ∑ = {0:c2}"; }
+            if (e.FieldName == "DaysReceiptToAppendixOffering") { e.Summary.FormatString = "Tage VA-NT = {0:n0}"; }
+            if (e.FieldName == "Description") { e.Summary.FormatString = "Alle = {0:n0}"; }
+        }
+
+        /// <summary>
+        /// Customize column summary
+        /// </summary>
+        private void generator_CustomizeTotalColumnSummary(object source, ColumnSummaryCreationEventArgs e)
+        {
+            if (e.FieldName == "Value") { e.Summary.FormatString = "{0:c2}"; }
+            if (e.FieldName == "Percentage") { e.Summary.FormatString = "{0:p0}"; }
+            if (e.FieldName == "PercentageValue") { e.Summary.FormatString = "{0:c2}"; }
+            if (e.FieldName == "DaysReceiptToAppendixOffering") { e.Summary.FormatString = "{0:n0}"; }
+            if (e.FieldName == "Description") { e.Summary.FormatString = "Alle = {0:n0}"; }
+        }
+
         /// <summary>
         /// Partial edit for editing of existing or for new deviation
         /// </summary>

+ 61 - 48
GreenTree.Nachtragsmanagement.Web/Controllers/MiscController.cs

@@ -14,6 +14,7 @@ using GreenTree.Nachtragsmanagement.Services.Logging;
 using GreenTree.Nachtragsmanagement.Services.Misc;
 using GreenTree.Nachtragsmanagement.Services.Scheduling;
 using GreenTree.Nachtragsmanagement.Services.User;
+using GreenTree.Nachtragsmanagement.Web.Extensions;
 using GreenTree.Nachtragsmanagement.Web.Framework.Authorization;
 using GreenTree.Nachtragsmanagement.Web.Models.Config;
 using GreenTree.Nachtragsmanagement.Web.Models.Global;
@@ -23,10 +24,12 @@ using System;
 using System.Collections.Generic;
 using System.IO;
 using System.Linq;
+using System.Net.Mime;
 using System.Web;
 using System.Web.Mvc;
 using System.Web.UI;
 using System.Web.UI.WebControls;
+using static GreenTree.Nachtragsmanagement.Web.Extensions.MVCxGridViewGeneratorHelper;
 
 namespace GreenTree.Nachtragsmanagement.Web.Controllers
 {
@@ -150,40 +153,6 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
             return PartialView("~/Views/Misc/_MailNotificationPluginJobsPartial.cshtml", mailNotificationModel);
         }
 
-        /// <summary>
-        /// Export result for mailNotification grid
-        /// </summary>
-        [HttpPost]
-        public ActionResult ExportPartialMailNotifications(GridViewExportFormat exportformat)
-        {
-            if (exportformat == null || String.IsNullOrEmpty(exportformat.Format))
-                return new EmptyResult();
-
-            var mailNotifications = _miscService.GetAllMailNotifications();
-            var mailNotificationModels = mailNotifications
-                .Select(u => MailNotificationDataModel.FromMailNotification(
-                    u, false, _notificationService, _notificationScheduler))
-                .ToList();
-
-            var viewContext = new ViewContext();
-            var viewPage = new ViewPage();
-            var htmlHelper = new HtmlHelper(viewContext, viewPage);
-
-            var gridViewSettings = Extensions.GridViewSettingsHelper.MailNotificationGridViewSettings(htmlHelper);
-
-            switch (exportformat.Format.ToLower())
-            {
-                case "xlsx":
-                    return GridViewExtension.ExportToXlsx(gridViewSettings, mailNotificationModels);
-                case "xls":
-                    return GridViewExtension.ExportToXls(gridViewSettings, mailNotificationModels);
-                case "pdf":
-                    return GridViewExtension.ExportToPdf(gridViewSettings, mailNotificationModels);
-                default:
-                    return new EmptyResult();
-            }
-        }
-
         /// <summary>
         /// Partial edit for editing of existing or for new mailNotification
         /// </summary>
@@ -384,14 +353,16 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
         }
 
         /// <summary>
-        /// Export result for log grid
+        /// Export result for misc grid
         /// </summary>
         [HttpPost]
-        public ActionResult ExportPartialLogs(GridViewExportFormat exportformat)
+        public ActionResult ExportPartialLogs(string displayMode, string exportformat)
         {
-            if (exportformat == null || String.IsNullOrEmpty(exportformat.Format))
+            if (String.IsNullOrEmpty(displayMode))
                 return new EmptyResult();
 
+            var currentUser = _userHelper.FromCookies();
+
             var logs = _logger.GetAllLogs();
             var logModels = logs
                 .Select(u => LogDataModel.FromLog(u, false))
@@ -399,20 +370,62 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
             var viewContext = new ViewContext();
             var viewPage = new ViewPage();
-            var htmlHelper = new HtmlHelper(viewContext, viewPage);
+            var htmlHelper = new System.Web.Mvc.HtmlHelper(viewContext, viewPage);
+
+            MVCxGridViewState gridViewState = (MVCxGridViewState)Session["LogGridViewState"];
+
+            var settings = GridViewSettingsHelper.LogGridViewSettings(htmlHelper);
+
+            if (gridViewState != null)
+            {
+                var generator = new MVCReportGeneratonHelper();
+
+                generator.CustomizeColumnsCollection += new CustomizeColumnsCollectionEventHandler(logGenerator_CustomizeColumnsCollection);
 
-            var gridViewSettings = Extensions.GridViewSettingsHelper.LogGridViewSettings(htmlHelper);
+                var report = generator.GenerateMVCReport(gridViewState, logModels);
 
-            switch (exportformat.Format.ToLower())
+                if (displayMode == "popup")
+                    return PartialView("~/Views/Shared/_PrintPopupPartial.cshtml",
+                        new PrintGridModel(report, "Misc", "ExportPartialLogs", "devGridViewLog"));
+                else if (displayMode == "callback")
+                    return PartialView("~/Views/Shared/_PrintDocumentViewerPartial.cshtml",
+                        new PrintGridModel(report, "Misc", "ExportPartialLogs", "devGridViewLog"));
+                else if (displayMode == "export")
+                {
+                    switch (exportformat.ToLower())
+                    {
+                        case "xlsx":
+                            return GridViewExtension.ExportToXlsx(settings, logModels);
+                        case "xls":
+                            return GridViewExtension.ExportToXls(settings, logModels);
+                        case "pdf":
+                            generator.WritePdfToResponse(Response, "Logliste.pdf", DispositionTypeNames.Attachment.ToString());
+                            break;
+                    }
+                }
+
+                return new EmptyResult();
+            }
+            else
+                return new EmptyResult();
+        }
+
+        /// <summary>
+        /// Customize created columns
+        /// </summary>
+        private void logGenerator_CustomizeColumnsCollection(object source, ColumnsCreationEventArgs e)
+        {
+            foreach (var column in e.ColumnsInfo)
             {
-                case "xlsx":
-                    return GridViewExtension.ExportToXlsx(gridViewSettings, logModels);
-                case "xls":
-                    return GridViewExtension.ExportToXls(gridViewSettings, logModels);
-                case "pdf":
-                    return GridViewExtension.ExportToPdf(gridViewSettings, logModels);
-                default:
-                    return new EmptyResult();
+                if (column.ColumnCaption == "#") { column.IsVisible = false; }
+                if (column.FieldName == "LogLevelDescription") { column.ColumnWidth = 60; }
+                if (column.FieldName == "ShortMessage") { column.ColumnWidth = 300; }
+                if (column.FieldName == "FullMessage") { column.IsVisible = false; column.IsDetail = true; }
+                if (column.FieldName == "IpAddress") { column.ColumnWidth = 70; }
+                if (column.FieldName == "UserDescription") { column.ColumnWidth = 70; }
+                if (column.FieldName == "EntityType") { column.ColumnWidth = 60; }
+                if (column.FieldName == "EntityId") { column.ColumnWidth = 50; }
+                if (column.FieldName == "CreatedOnUtc") { column.ColumnWidth = 70; }
             }
         }
 

+ 85 - 13
GreenTree.Nachtragsmanagement.Web/Controllers/SiteController.cs

@@ -11,6 +11,7 @@ using GreenTree.Nachtragsmanagement.Services.Deviation;
 using GreenTree.Nachtragsmanagement.Services.Logging;
 using GreenTree.Nachtragsmanagement.Services.Site;
 using GreenTree.Nachtragsmanagement.Services.User;
+using GreenTree.Nachtragsmanagement.Web.Extensions;
 using GreenTree.Nachtragsmanagement.Web.Framework.Authorization;
 using GreenTree.Nachtragsmanagement.Web.Models.Global;
 using GreenTree.Nachtragsmanagement.Web.Models.Site;
@@ -19,10 +20,12 @@ using System;
 using System.Collections.Generic;
 using System.IO;
 using System.Linq;
+using System.Net.Mime;
 using System.Web;
 using System.Web.Mvc;
 using System.Web.UI;
 using System.Web.UI.WebControls;
+using static GreenTree.Nachtragsmanagement.Web.Extensions.MVCxGridViewGeneratorHelper;
 
 namespace GreenTree.Nachtragsmanagement.Web.Controllers
 {
@@ -130,9 +133,9 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
         /// Export result for site grid
         /// </summary>
         [HttpPost]
-        public ActionResult ExportPartialSites(GridViewExportFormat exportformat)
+        public ActionResult ExportPartialSites(string displayMode, string exportformat, string exportType)
         {
-            if (exportformat == null || String.IsNullOrEmpty(exportformat.Format))
+            if (String.IsNullOrEmpty(displayMode))
                 return new EmptyResult();
 
             var currentUser = _userHelper.FromCookies();
@@ -144,21 +147,90 @@ namespace GreenTree.Nachtragsmanagement.Web.Controllers
 
             var viewContext = new ViewContext();
             var viewPage = new ViewPage();
-            var htmlHelper = new HtmlHelper(viewContext, viewPage);
+            var htmlHelper = new System.Web.Mvc.HtmlHelper(viewContext, viewPage);
 
-            var gridViewSettings = Extensions.GridViewSettingsHelper.SiteGridViewSettings(htmlHelper);
+            MVCxGridViewState gridViewState = (MVCxGridViewState)Session["SiteGridViewState"];
 
-            switch (exportformat.Format.ToLower())
+            var settings = GridViewSettingsHelper.SiteGridViewSettings(htmlHelper);
+
+            if (gridViewState != null)
             {
-                case "xlsx":
-                    return GridViewExtension.ExportToXlsx(gridViewSettings, siteModels);
-                case "xls":
-                    return GridViewExtension.ExportToXls(gridViewSettings, siteModels);
-                case "pdf":
-                    return GridViewExtension.ExportToPdf(gridViewSettings, siteModels);
-                default:
-                    return new EmptyResult();
+                var generator = new MVCReportGeneratonHelper();
+
+                generator.CustomizeColumnsCollection += new CustomizeColumnsCollectionEventHandler(generator_CustomizeColumnsCollection);
+                generator.CustomizeGroupColumnSummary += new CustomizeColumnGroupSummaryEventHandler(generator_CustomizeGroupColumnSummary);
+                generator.CustomizeTotalColumnSummary += new CustomizeColumnTotalSummaryEventHandler(generator_CustomizeTotalColumnSummary);
+
+                var report = generator.GenerateMVCReport(gridViewState, siteModels);
+
+                if (displayMode == "popup")
+                    return PartialView("~/Views/Shared/_PrintPopupPartial.cshtml",
+                        new PrintGridModel(report, "Site", "ExportPartialSites", "devGridViewSite"));
+                else if (displayMode == "callback")
+                    return PartialView("~/Views/Shared/_PrintDocumentViewerPartial.cshtml",
+                        new PrintGridModel(report, "Site", "ExportPartialSites", "devGridViewSite"));
+                else if (displayMode == "export")
+                {
+                    if (exportType != "print")
+                    {
+                        switch (exportformat.ToLower())
+                        {
+                            case "xlsx":
+                                settings.TotalSummary["DeviationValue"].DisplayFormat = "{0:c2}";
+                                settings.TotalSummary["Description"].DisplayFormat = "Anzahl = {0:n0}";
+                                return GridViewExtension.ExportToXlsx(settings, siteModels);
+                            case "xls":
+                                settings.TotalSummary["DeviationValue"].DisplayFormat = "{0:c2}";
+                                settings.TotalSummary["Description"].DisplayFormat = "Anzahl = {0:n0}";
+                                return GridViewExtension.ExportToXls(settings, siteModels);
+                            case "pdf":
+                                generator.WritePdfToResponse(Response, "Baustellenliste.pdf", DispositionTypeNames.Attachment.ToString());
+                                break;
+                        }
+                    }
+                }
+
+                return new EmptyResult();
             }
+            else
+                return new EmptyResult();
+        }
+
+        /// <summary>
+        /// Customize created columns
+        /// </summary>
+        private void generator_CustomizeColumnsCollection(object source, ColumnsCreationEventArgs e)
+        {
+            foreach (var column in e.ColumnsInfo)
+            {
+                if (column.ColumnCaption == "#") { column.IsVisible = false; }
+                if (column.FieldName == "CustomNumber") { column.ColumnWidth = 60; }
+                if (column.FieldName == "SiteDescription") { column.ColumnWidth = 80; }
+                if (column.FieldName == "Start") { column.ColumnWidth = 65; }
+                if (column.FieldName == "End") { column.ColumnWidth = 65; }
+                if (column.FieldName == "AppendixDescription") { column.ColumnWidth = 60; }
+                if (column.FieldName == "DeviationValue") { column.ColumnWidth = 70; }
+                if (column.FieldName == "UserDescription") { column.ColumnWidth = 120; }
+                if (column.FieldName == "Comment") { column.IsVisible = false; column.IsDetail = true; }
+            }
+        }
+
+        /// <summary>
+        /// Customize column summary
+        /// </summary>
+        private void generator_CustomizeGroupColumnSummary(object source, ColumnSummaryCreationEventArgs e)
+        {
+            if (e.FieldName == "DeviationValue") { e.Summary.FormatString = "VA-Wert ∑ = {0:c2}"; }
+            if (e.FieldName == "Description") { e.Summary.FormatString = "Alle = {0:n0}"; }
+        }
+
+        /// <summary>
+        /// Customize column summary
+        /// </summary>
+        private void generator_CustomizeTotalColumnSummary(object source, ColumnSummaryCreationEventArgs e)
+        {
+            if (e.FieldName == "DeviationValue") { e.Summary.FormatString = "{0:c2}"; }
+            if (e.FieldName == "Description") { e.Summary.FormatString = "Alle = {0:n0}"; }
         }
 
         /// <summary>

+ 31 - 95
GreenTree.Nachtragsmanagement.Web/Extensions/GridViewSettingsHelper.cs

@@ -72,27 +72,10 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
                 });
                 t.Items.Add(i =>
                 {
-                    i.Text = "Exportieren nach";
-                    i.Image.IconID = IconID.ActionsDownload16x16office2013;
+                    i.Text = "Drucken";
+                    i.Name = "Print";
+                    i.Image.IconID = IconID.PrintDefaultprinter16x16;
                     i.BeginGroup = true;
-                    i.Items.Add(exportitem =>
-                    {
-                        exportitem.Name = "Pdf";
-                        exportitem.Text = "PDF";
-                        exportitem.Image.IconID = IconID.ExportExporttopdf16x16office2013;
-                    });
-                    i.Items.Add(exportitem =>
-                    {
-                        exportitem.Name = "Xlsx";
-                        exportitem.Text = "XLSX";
-                        exportitem.Image.IconID = IconID.ExportExporttoxlsx16x16office2013;
-                    });
-                    i.Items.Add(exportitem =>
-                    {
-                        exportitem.Name = "Xls";
-                        exportitem.Text = "XLS";
-                        exportitem.Image.IconID = IconID.ExportExporttoxls16x16office2013;
-                    });
                 });
             });
 
@@ -155,7 +138,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
             });
             s.Columns.Add(column =>
             {
-                column.Caption = "VA";
+                column.Caption = "Offene VA";
                 column.FieldName = "DeviationDescription";
                 column.Visible = false;
                 column.MinWidth = 150;
@@ -179,6 +162,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
             s.Columns.Add(column =>
             {
                 column.Caption = "Mitarbeiter";
+                column.FieldName = "UserDescription";
                 column.MinWidth = 150;
                 column.Width = new Unit(15, UnitType.Percentage);
                 column.SetDataItemTemplateContent(c =>
@@ -273,6 +257,12 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
                 else
                     System.Web.HttpContext.Current.Session["SiteGridState"] = e.LayoutData;
             };
+
+            s.PreRender = s.BeforeGetCallbackResult = (sender, e) => {
+                MVCxGridView gridView = sender as MVCxGridView;
+                System.Web.HttpContext.Current.Session["SiteGridViewState"] = new MVCxGridViewState(gridView);
+            };
+
             s.ClientSideEvents.BeginCallback = "function (s, e) { e.customArgs['scrollHeight'] = [ gridScrollHeight ]; }";
             s.ClientSideEvents.ToolbarItemClick = "function (s, e) { onToolbarItemClick(s, e); }";
 
@@ -338,27 +328,10 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
                 });
                 t.Items.Add(i =>
                 {
-                    i.Text = "Exportieren nach";
-                    i.Image.IconID = IconID.ActionsDownload16x16office2013;
+                    i.Text = "Drucken";
+                    i.Name = "Print";
+                    i.Image.IconID = IconID.PrintDefaultprinter16x16;
                     i.BeginGroup = true;
-                    i.Items.Add(exportitem =>
-                    {
-                        exportitem.Name = "Pdf";
-                        exportitem.Text = "PDF";
-                        exportitem.Image.IconID = IconID.ExportExporttopdf16x16office2013;
-                    });
-                    i.Items.Add(exportitem =>
-                    {
-                        exportitem.Name = "Xlsx";
-                        exportitem.Text = "XLSX";
-                        exportitem.Image.IconID = IconID.ExportExporttoxlsx16x16office2013;
-                    });
-                    i.Items.Add(exportitem =>
-                    {
-                        exportitem.Name = "Xls";
-                        exportitem.Text = "XLS";
-                        exportitem.Image.IconID = IconID.ExportExporttoxls16x16office2013;
-                    });
                 });
             });
 
@@ -588,6 +561,12 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
                 else
                     System.Web.HttpContext.Current.Session["DeviationGridState"] = e.LayoutData;
             };
+
+            s.PreRender = s.BeforeGetCallbackResult = (sender, e) => {
+                MVCxGridView gridView = sender as MVCxGridView;
+                System.Web.HttpContext.Current.Session["DeviationGridViewState"] = new MVCxGridViewState(gridView);
+            };
+
             s.ClientSideEvents.BeginCallback = "function (s, e) { e.customArgs['scrollHeight'] = [ gridScrollHeight ]; }";
             s.ClientSideEvents.ToolbarItemClick = "function (s, e) { onToolbarItemClick(s, e); }";
 
@@ -909,30 +888,6 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
                     i.Image.IconID = IconID.OtherViewgridlines16x16gray;
                     i.BeginGroup = true;
                 });
-                t.Items.Add(i =>
-                {
-                    i.Text = "Exportieren nach";
-                    i.Image.IconID = IconID.ActionsDownload16x16office2013;
-                    i.BeginGroup = true;
-                    i.Items.Add(exportitem =>
-                    {
-                        exportitem.Name = "Pdf";
-                        exportitem.Text = "PDF";
-                        exportitem.Image.IconID = IconID.ExportExporttopdf16x16office2013;
-                    });
-                    i.Items.Add(exportitem =>
-                    {
-                        exportitem.Name = "Xlsx";
-                        exportitem.Text = "XLSX";
-                        exportitem.Image.IconID = IconID.ExportExporttoxlsx16x16office2013;
-                    });
-                    i.Items.Add(exportitem =>
-                    {
-                        exportitem.Name = "Xls";
-                        exportitem.Text = "XLS";
-                        exportitem.Image.IconID = IconID.ExportExporttoxls16x16office2013;
-                    });
-                });
             });
 
             if (_userContext.CurrentUser.HasFunction("Misc-MailNotifications-Edit"))
@@ -1085,27 +1040,10 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
                 });
                 t.Items.Add(i =>
                 {
-                    i.Text = "Exportieren nach";
-                    i.Image.IconID = IconID.ActionsDownload16x16office2013;
+                    i.Text = "Drucken";
+                    i.Name = "Print";
+                    i.Image.IconID = IconID.PrintDefaultprinter16x16;
                     i.BeginGroup = true;
-                    i.Items.Add(exportitem =>
-                    {
-                        exportitem.Name = "Pdf";
-                        exportitem.Text = "PDF";
-                        exportitem.Image.IconID = IconID.ExportExporttopdf16x16office2013;
-                    });
-                    i.Items.Add(exportitem =>
-                    {
-                        exportitem.Name = "Xlsx";
-                        exportitem.Text = "XLSX";
-                        exportitem.Image.IconID = IconID.ExportExporttoxlsx16x16office2013;
-                    });
-                    i.Items.Add(exportitem =>
-                    {
-                        exportitem.Name = "Xls";
-                        exportitem.Text = "XLS";
-                        exportitem.Image.IconID = IconID.ExportExporttoxls16x16office2013;
-                    });
                 });
             });
 
@@ -1207,16 +1145,8 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
             s.Columns.Add(column =>
             {
                 column.Caption = "Zeitpunkt";
-                column.FieldName = "CreatedOnUtc";
-                column.SetDataItemTemplateContent(c =>
-                {
-                    var dateTime = DataBinder.Eval(c.DataItem, "CreatedOnUtc") as DateTime?;
-                    var text = dateTime == null
-                        ? String.Empty
-                        : dateTime.Value.ToLocalTime().ToString("dd.MM.yyyy - HH:mm:ss");
-
-                    html.ViewContext.Writer.Write(text);
-                });
+                column.FieldName = "CreatedOnLocal";
+                column.PropertiesEdit.DisplayFormatString = "dd.MM.yyyy - HH:mm:ss";
                 column.MinWidth = 150;
                 column.Width = new Unit(12, UnitType.Percentage);
             });
@@ -1231,6 +1161,12 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
                 else
                     System.Web.HttpContext.Current.Session["LogGridState"] = e.LayoutData;
             };
+
+            s.PreRender = s.BeforeGetCallbackResult = (sender, e) => {
+                MVCxGridView gridView = sender as MVCxGridView;
+                System.Web.HttpContext.Current.Session["LogGridViewState"] = new MVCxGridViewState(gridView);
+            };
+
             s.ClientSideEvents.BeginCallback = "function (s, e) { e.customArgs['scrollHeight'] = [ gridScrollHeight ]; }";
             s.ClientSideEvents.ToolbarItemClick = "function (s, e) { onToolbarItemClick(s, e); }";
 

+ 179 - 24
GreenTree.Nachtragsmanagement.Web/Extensions/MVCxGridViewGeneratorHelper.cs

@@ -17,7 +17,8 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
     {
         public delegate void CustomizeColumnsCollectionEventHandler(object source, ColumnsCreationEventArgs e);
         public delegate void CustomizeColumnEventHandler(object source, ControlCustomizationEventArgs e);
-        public delegate void CustomizeColumnSummaryEventHandler(object source, ColumnSummaryCreationEventArgs e);
+        public delegate void CustomizeColumnTotalSummaryEventHandler(object source, ColumnSummaryCreationEventArgs e);
+        public delegate void CustomizeColumnGroupSummaryEventHandler(object source, ColumnSummaryCreationEventArgs e);
 
         public class MVCReportGeneratonHelper
         {
@@ -33,7 +34,8 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
 
             public event CustomizeColumnsCollectionEventHandler CustomizeColumnsCollection;
             public event CustomizeColumnEventHandler CustomizeColumn;
-            public event CustomizeColumnSummaryEventHandler CustomizeColumnSummary;
+            public event CustomizeColumnTotalSummaryEventHandler CustomizeTotalColumnSummary;
+            public event CustomizeColumnGroupSummaryEventHandler CustomizeGroupColumnSummary;
 
             public XtraReport GenerateMVCReport(MVCxGridViewState gridViewState, object model)
             {
@@ -47,6 +49,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
                 InitStyles();
                 InitDataSource(model);
                 InitDetailsAndPageHeader(gridViewState);
+                InitDetailReports(gridViewState);
                 InitSortings(gridViewState);
                 InitGroupHeaders(gridViewState);
                 InitFilters(gridViewState);
@@ -60,8 +63,8 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
                 report.StyleSheet.Add(new XRControlStyle
                 {
                     Name = "OddRow",
-                    Borders = (DevExpress.XtraPrinting.BorderSide.Bottom | 
-                               DevExpress.XtraPrinting.BorderSide.Left | 
+                    Borders = (DevExpress.XtraPrinting.BorderSide.Bottom |
+                               DevExpress.XtraPrinting.BorderSide.Left |
                                DevExpress.XtraPrinting.BorderSide.Right),
                     Padding = new PaddingInfo(30, 600)
                 });
@@ -85,6 +88,15 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
                     Font = new Font(report.Font, FontStyle.Bold)
                 });
 
+                report.StyleSheet.Add(new XRControlStyle
+                {
+                    Name = "GroupHeader",
+                    BackColor = Color.Beige,
+                    Borders = DevExpress.XtraPrinting.BorderSide.All,
+                    Padding = new PaddingInfo(30, 600),
+                    Font = new Font(report.Font, FontStyle.Bold)
+                });
+
                 report.StyleSheet.Add(new XRControlStyle
                 {
                     Name = "SummaryRow",
@@ -95,6 +107,22 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
                     ForeColor = Color.White,
                     Font = new Font(report.Font, FontStyle.Bold)
                 });
+
+                report.StyleSheet.Add(new XRControlStyle
+                {
+                    Name = "DetailRow",
+                    BackColor = Color.FromArgb(209, 228, 255),
+                    Borders = DevExpress.XtraPrinting.BorderSide.All
+                });
+
+                report.StyleSheet.Add(new XRControlStyle
+                {
+                    Name = "DetailRowLabel",
+                    Padding = new PaddingInfo(30, 600),
+                    Borders = DevExpress.XtraPrinting.BorderSide.Bottom | 
+                              DevExpress.XtraPrinting.BorderSide.Left | 
+                              DevExpress.XtraPrinting.BorderSide.Right
+                });
             }
 
             private void InitDataSource(object model)
@@ -117,7 +145,8 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
 
                 report.Bands.Add(new DetailBand()
                 {
-                    HeightF = bandHeight
+                    HeightF = bandHeight,
+                    KeepTogetherWithDetailReports = true
                 });
                 report.Bands.Add(new PageHeaderBand()
                 {
@@ -167,8 +196,10 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
                             CustomizeColumn(report, cc);
 
                         if (cc.IsModified == false)
+                        {
                             cell2.DataBindings.Add("Text", null, columns[i].FieldName,
                                 "{0:" + columns[i].GridViewColumn.DisplayFormat + "}");
+                        }
 
                         detailsInfo.Add(columns[i].GridViewColumn, cell2);
 
@@ -190,6 +221,70 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
                 report.Bands[BandKind.Detail].Controls.Add(detailTable);
             }
 
+            private void InitDetailReports(MVCxGridViewState gridViewState)
+            {
+                var groupedColumns = gridViewState.GroupedColumns;
+
+                var pagewidth = (report.PageWidth - (report.Margins.Left + report.Margins.Right)) - groupedColumns.Count * subGroupOffset;
+                var columns = GetColumnsInfo(gridViewState, pagewidth);
+
+                if (CustomizeColumnsCollection != null)
+                    CustomizeColumnsCollection(report, new ColumnsCreationEventArgs(pagewidth)
+                    {
+                        ColumnsInfo = columns
+                    });
+
+                var detailColumns = columns
+                    .Where(c => c.IsDetail)
+                    .ToList();
+
+                if (!detailColumns.Any()) return;
+
+                var detailReportBand = new DetailReportBand()
+                {
+                    HeightF = bandHeight
+                };
+                report.Bands.Add(detailReportBand);
+
+                var detailReportTable = new XRTable
+                {
+                    OddStyleName = "DetailRow",
+                    EvenStyleName = "DetailRow",
+                    WidthF = pagewidth
+                };
+                var detailReportRow = new XRTableRow();
+
+                foreach (var detailColumn in detailColumns)
+                {
+                    var cellDetail = new XRTableCell
+                    {
+                        WidthF = pagewidth / detailColumns.Count
+                    };
+
+                    var label = new XRLabel
+                    {
+                        StyleName = "DetailRowLabel",
+                        WidthF = pagewidth / detailColumns.Count,
+                        WordWrap = true
+                    };
+
+                    label.DataBindings.Add("Text", null, detailColumn.FieldName,
+                        "{0:" + detailColumn.GridViewColumn.DisplayFormat + "}");
+
+                    cellDetail.Controls.Add(label);
+
+                    detailReportRow.Cells.Add(cellDetail);
+                }
+
+                detailReportTable.Rows.Add(detailReportRow);
+                detailReportTable.LocationF = new PointF(groupedColumns.Count * subGroupOffset, 0);
+
+                DetailBand detailBand = new DetailBand();
+                detailBand.Height = detailReportTable.Height;
+                detailReportBand.Bands.Add(detailBand);
+                detailBand.Controls.Add(detailReportTable);
+            }
+
             private void InitSortings(MVCxGridViewState gridViewState)
             {
                 var columns = gridViewState.Columns;
@@ -207,24 +302,67 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
 
             private void InitGroupHeaders(MVCxGridViewState gridViewState)
             {
-                GridViewDataColumnStateCollection groupedColumns = gridViewState.GroupedColumns;
-                for (int i = groupedColumns.Count - 1; i >= 0; i--)
+                var groupedColumns = gridViewState.GroupedColumns;
+
+                for (var i = groupedColumns.Count - 1; i >= 0; i--)
                 {
+                    var groupedColumn = groupedColumns[i];
+                    var gb = new GroupHeaderBand
+                    {
+                        Height = bandHeight
+                    };
+
+                    var groupHeaderTable = new XRTable
+                    {
+                        StyleName = "GroupHeader",
+                        LocationF = new PointF(initialGroupOffset + i * 10, 0),
+                        SizeF = new SizeF((report.PageWidth - (report.Margins.Left + report.Margins.Right)) - (initialGroupOffset + i * subGroupOffset), bandHeight)
+                    };
+                    var groupHeaderRow = new XRTableRow();
+
+                    var l = new XRTableCell
+                    {
+                        Text = groupedColumn.Caption + ": [" + groupedColumn.FieldName + "]",
+                        Borders = DevExpress.XtraPrinting.BorderSide.Left |
+                                  DevExpress.XtraPrinting.BorderSide.Top |
+                                  DevExpress.XtraPrinting.BorderSide.Bottom
+                    };
+
+                    groupHeaderRow.Cells.Add(l);
+
+                    foreach (MVCxSummaryItemState item in gridViewState.TotalSummary)
                     {
-                        GridViewDataColumnState groupedColumn = groupedColumns[i];
-                        GroupHeaderBand gb = new GroupHeaderBand();
-                        gb.Height = bandHeight;
-                        XRLabel l = new XRLabel();
-                        l.Text = groupedColumn.FieldName + ": [" + groupedColumn.FieldName + "]";
-                        l.LocationF = new PointF(initialGroupOffset + i * 10, 0);
-                        l.BackColor = Color.Beige;
-                        l.SizeF = new SizeF((report.PageWidth - (report.Margins.Left + report.Margins.Right)) - (initialGroupOffset + i * subGroupOffset), bandHeight);
-                        gb.Controls.Add(l);
-                        gb.RepeatEveryPage = shouldRepeatGroupHeadersOnEveryPage;
-                        GroupField gf = new GroupField(groupedColumn.FieldName, groupedColumn.SortOrder == ColumnSortOrder.Ascending ? XRColumnSortOrder.Ascending : XRColumnSortOrder.Descending);
-                        gb.GroupFields.Add(gf);
-                        report.Bands.Add(gb);
+                        var sum = new XRTableCell
+                        {
+                            Borders = DevExpress.XtraPrinting.BorderSide.Top |
+                                      DevExpress.XtraPrinting.BorderSide.Bottom
+                        };
+
+                        sum.Summary = new XRSummary
+                        {
+                            Running = SummaryRunning.Group
+                        };
+                        sum.Summary.Func = GetSummaryFunc(item.SummaryType);
+                        sum.DataBindings.Add("Text", null, item.FieldName);
+
+                        groupHeaderRow.Cells.Add(sum);
+
+                        if (CustomizeGroupColumnSummary != null)
+                            CustomizeGroupColumnSummary(report, new ColumnSummaryCreationEventArgs(item.FieldName, sum.Summary));
                     }
+
+                    groupHeaderTable.Rows.Add(groupHeaderRow);
+                    gb.Controls.Add(groupHeaderTable);
+
+                    gb.RepeatEveryPage = shouldRepeatGroupHeadersOnEveryPage;
+
+                    var gf = new GroupField(
+                        groupedColumn.FieldName, groupedColumn.SortOrder == ColumnSortOrder.Ascending 
+                            ? XRColumnSortOrder.Ascending 
+                            : XRColumnSortOrder.Descending);
+
+                    gb.GroupFields.Add(gf);
+                    report.Bands.Add(gb);
                 }
             }
 
@@ -245,7 +383,9 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
 
                 foreach (MVCxSummaryItemState item in gridViewState.TotalSummary)
                 {
-                    var col = gridViewState.Columns[item.ShowInColumn == string.Empty ? item.FieldName : item.ShowInColumn];
+                    var col = gridViewState.Columns[item.ShowInColumn == string.Empty 
+                        ? item.FieldName 
+                        : item.ShowInColumn];
 
                     if (col == null) continue;
 
@@ -253,7 +393,9 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
 
                     var label = new XRLabel
                     {
-                        LocationF = ((XRTableCell)detailsInfo[col]).LocationF,
+                        LocationF = new PointF(
+                            ((XRTableCell)detailsInfo[col]).LocationF.X + subGroupOffset * gridViewState.GroupedColumns.Count,
+                            ((XRTableCell)detailsInfo[col]).LocationF.Y),
                         SizeF = ((XRTableCell)detailsInfo[col]).SizeF
                     };
                     label.DataBindings.Add("Text", null, col.FieldName);
@@ -266,8 +408,8 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
 
                     report.Bands[BandKind.ReportFooter].Controls.Add(label);
 
-                    if (CustomizeColumnSummary != null)
-                        CustomizeColumnSummary(report, new ColumnSummaryCreationEventArgs(col.FieldName, label.Summary));
+                    if (CustomizeTotalColumnSummary != null)
+                        CustomizeTotalColumnSummary(report, new ColumnSummaryCreationEventArgs(col.FieldName, label.Summary));
                 }
             }
 
@@ -559,6 +701,19 @@ namespace GreenTree.Nachtragsmanagement.Web.Extensions
                     isVisible = value;
                 }
             }
+            bool isDetail;
+
+            public bool IsDetail
+            {
+                get
+                {
+                    return isDetail;
+                }
+                set
+                {
+                    isDetail = value;
+                }
+            }
         }
     }
 }

+ 16 - 0
GreenTree.Nachtragsmanagement.Web/Models/Global/PrintGridModel.cs

@@ -8,6 +8,22 @@ namespace GreenTree.Nachtragsmanagement.Web.Models.Global
 {
     public class PrintGridModel
     {
+        public PrintGridModel()
+        {
+
+        }
+
+        public PrintGridModel(XtraReport report, string controller, string action, string gridViewName)
+        {
+            Report = report;
+            Controller = controller;
+            Action = action;
+            GridViewName = gridViewName;
+        }
+
         public XtraReport Report { get; set; }
+        public string Controller { get; set; }
+        public string Action { get; set; }
+        public string GridViewName { get; set; }
     }
 }

+ 7 - 0
GreenTree.Nachtragsmanagement.Web/Models/Misc/LogDataModel.cs

@@ -21,6 +21,13 @@ namespace GreenTree.Nachtragsmanagement.Web.Models.Misc
         public string PageUrl { get; set; }
         public string ReferrerUrl { get; set; }
         public DateTime CreatedOnUtc { get; set; }
+        public DateTime CreatedOnLocal
+        {
+            get
+            {
+                return CreatedOnUtc.ToLocalTime();
+            }
+        }
 
         public LogDataModel()
         {

+ 10 - 10
GreenTree.Nachtragsmanagement.Web/Models/Site/SiteDataModel.cs

@@ -47,16 +47,7 @@ namespace GreenTree.Nachtragsmanagement.Web.Models.Site
         public ICollection<int> UserValues { get; set; }
         public ICollection<string> UserDescriptions { get; set; }
         public ICollection<UserDataModel> Users { get; set; }
-        public string UserDescription
-        {
-            get
-            {
-                if (UserDescriptions == null)
-                    return String.Empty;
-                else
-                    return String.Join(", ", UserDescriptions);
-            }
-        }
+        public string UserDescription { get; set; }
         public ICollection<SiteTreeDataModel> SiteTreeData { get; set; }
 
         public SiteDataModel()
@@ -138,6 +129,15 @@ namespace GreenTree.Nachtragsmanagement.Web.Models.Site
                         .OrderBy(r => r.Roles)
                         .Select(r => String.Format("{0}|({1})", r.LastName, r.Roles))
                         .ToList(),
+                UserDescription =
+                    String.Join(", ",
+                        siteEntity.Users
+                            .Select(r => new
+                            {
+                                LastName = r.Lastname,
+                                Roles = String.Join(", ", r.Roles.Select(u => u.Description))
+                            })
+                            .Select(u => String.Format("{0} ({1})", u.LastName, u.Roles ))),
                 Users = 
                     siteEntity.Users
                         .Select(r => UserDataModel.FromUser(r, false))

+ 1 - 0
GreenTree.Nachtragsmanagement.Web/Views/Appendices/View.cshtml

@@ -46,6 +46,7 @@
 				data: { displayMode: "popup", exportFormat: "" },
 				success: function (response) {
 					parent.$("body").append(response);
+					parent.exportFormat = "pdf";
 				}
 			});
 		} else if (e.item.name == "ToggleColumnChooser") {

+ 11 - 12
GreenTree.Nachtragsmanagement.Web/Views/Deviations/View.cshtml

@@ -38,9 +38,17 @@
 
 	function onToolbarItemClick(s, e) {
 		if (!s || !e) return;
-		if (IsExportToolbarCommand(e.item.name)) {
-			$("#Format").val(e.item.name);
-			$("#deviationExportForm").submit();
+		if (e.item.name == "Print") {
+			parent.$(".printPopupContainer").remove();
+			$.ajax({
+				type: "POST",
+				url: '@Url.Action("ExportPartialDeviations", "Deviation")',
+				data: { displayMode: "popup", exportFormat: "" },
+				success: function (response) {
+					parent.$("body").append(response);
+					parent.exportFormat = "pdf";
+				}
+			});
 		} else if (e.item.name == "ToggleColumnChooser") {
 			if (devGridViewDeviation.IsCustomizationWindowVisible())
 				devGridViewDeviation.HideCustomizationWindow();
@@ -49,10 +57,6 @@
 		}
 	}
 
-	function IsExportToolbarCommand(command) {
-		return command == "Pdf" || command == "Xlsx" || command == "Xls";
-	}
-
 	function editDeviation(id) {
 		if (!id) return;
 		$.ajax({
@@ -107,11 +111,6 @@
 	}
 </script>
 
-@using (Html.BeginForm("ExportPartialDeviations", "Deviation", FormMethod.Post, new { id = "deviationExportForm" }))
-{
-	@Html.Hidden("Format")
-}
-
 @Html.Partial("~/Views/Deviations/_DeviationGridPartial.cshtml", Model)
 @Html.Partial("~/Views/Shared/_PopupDialogYesNo.cshtml", new GreenTree.Nachtragsmanagement.Web.Models.Global.YesNoDialogModel
 {

+ 27 - 0
GreenTree.Nachtragsmanagement.Web/Views/Home/Index.cshtml

@@ -32,6 +32,7 @@
 	var eventListeners = [];
 
 	var exportFormat = "pdf";
+	var exportType = "download";
 
 	@foreach (var g in Model.AvailableFunctions)
 	{
@@ -248,12 +249,38 @@
 		event.stopPropagation();
 	}
 
+	function exportToolbarItemClick(s, e) {
+		if (!s || !e) return;
+		if (e.item.name == "PrintReport" || e.item.name == "PrintPage") {
+			exportType = "print";
+			var iframe = $("#devDocumentViewerReportGrid_Splitter_Viewer_ContentFrame");
+			var html = iframe.contents().find("html").html();
+			var w = window.open();
+			w.document.write(html);
+			w.print();
+			w.close();
+		} else if (e.item.name == "SaveToWindow" || e.item.name == "SaveToDisk") {
+			exportType = "download";
+		}
+	}
+
 	function customizeExportToolbar(baseName) {
 		var controls = ASPxClientControl.GetControlCollection();
 		var formatComboBox = ASPxClientComboBox.Cast(controls.GetByName(baseName + "_Splitter_Toolbar_Menu_ITCNT11_SaveFormat"));
+		var excludedFormats = [ "png", "csv", "txt", "html", "mht", "docx", "rtf" ]
+		var allItems = formatComboBox.GetItemCount();
+		for (var i = 0; i < allItems; i++) {
+			var item = formatComboBox.GetItem(i);
+		}
+		for (var i = 0; i < excludedFormats.length; i++) {
+			var item = formatComboBox.FindItemByValue(excludedFormats[i]);
+			if (!item) continue;
+			formatComboBox.RemoveItem(item.index);
+		}
 		formatComboBox.SelectedIndexChanged.AddHandler(function (s, e) {
 			exportFormat = s.GetValue();
 		});
+		exportFormat = "pdf";
 	}
 </script>
 

+ 11 - 12
GreenTree.Nachtragsmanagement.Web/Views/Misc/Logs.cshtml

@@ -37,9 +37,17 @@
 
 	function onToolbarItemClick(s, e) {
 		if (!s || !e) return;
-		if (IsExportToolbarCommand(e.item.name)) {
-			$("#Format").val(e.item.name);
-			$("#logExportForm").submit();
+		if (e.item.name == "Print") {
+			parent.$(".printPopupContainer").remove();
+			$.ajax({
+				type: "POST",
+				url: '@Url.Action("ExportPartialLogs", "Misc")',
+				data: { displayMode: "popup", exportFormat: "" },
+				success: function (response) {
+					parent.$("body").append(response);
+					parent.exportFormat = "pdf";
+				}
+			});
 		} else if (e.item.name == "ToggleColumnChooser") {
 			if (devGridViewLog.IsCustomizationWindowVisible())
 				devGridViewLog.HideCustomizationWindow();
@@ -48,10 +56,6 @@
 		}
 	}
 
-	function IsExportToolbarCommand(command) {
-		return command == "Pdf" || command == "Xlsx" || command == "Xls";
-	}
-
 	function viewLog(id) {
 		if (!id) return;
 		$.ajax({
@@ -86,9 +90,4 @@
 	}
 </script>
 
-@using (Html.BeginForm("ExportPartialLogs", "Misc", FormMethod.Post, new { id = "logExportForm" }))
-{
-	@Html.Hidden("Format")
-}
-
 @Html.Partial("~/Views/Misc/_LogGridPartial.cshtml", Model)

+ 1 - 9
GreenTree.Nachtragsmanagement.Web/Views/Misc/MailNotifications.cshtml

@@ -39,10 +39,7 @@
 
 	function onToolbarItemClick(s, e) {
 		if (!s || !e) return;
-		if (IsExportToolbarCommand(e.item.name)) {
-			$("#Format").val(e.item.name);
-			$("#mailNotificationExportForm").submit();
-		} else if (e.item.name == "ToggleColumnChooser") {
+		if (e.item.name == "ToggleColumnChooser") {
 			if (devGridViewMailNotifications.IsCustomizationWindowVisible())
 				devGridViewMailNotifications.HideCustomizationWindow();
 			else
@@ -141,11 +138,6 @@
 	}
 </script>
 
-@using (Html.BeginForm("ExportPartialMailNotifications", "Misc", FormMethod.Post, new { id = "mailNotificationExportForm" }))
-{
-	@Html.Hidden("Format")
-}
-
 @Html.Partial("~/Views/Misc/_MailNotificationGridPartial.cshtml", Model)
 @Html.Partial("~/Views/Shared/_PopupDialogYesNo.cshtml", new GreenTree.Nachtragsmanagement.Web.Models.Global.YesNoDialogModel
 {

+ 7 - 7
GreenTree.Nachtragsmanagement.Web/Views/Shared/_PrintDocumentViewerPartial.cshtml

@@ -7,19 +7,19 @@
 	t.Report = Model.Report;
 	t.CallbackRouteValues = new
 	{
-		Action = "ExportPartialAppendices",
-		Controller = "Appendix",
+		Action = Model.Action,
+		Controller = Model.Controller,
 		displayMode = "callback",
 		exportformat = String.Empty
 	};
 	t.ExportRouteValues = new
 	{
-		Action = "ExportPartialAppendices",
-		Controller = "Appendix",
+		Action = Model.Action,
+		Controller = Model.Controller,
 		displayMode = "export"
 	};
 	t.ToolbarMode = DocumentViewerToolbarMode.StandardToolbar;
-	t.ClientSideEvents.Init = "function (s, e) { customizeExportToolbar('devDocumentViewerReportGrid'); }";
-	t.ClientSideEvents.ToolbarItemClick = "function (s, e) { console.log(e); }";
-	t.ClientSideEvents.BeforeExportRequest = "function (s, e) { e.customArgs['exportFormat'] = exportFormat; }";
+	t.ClientSideEvents.Init = "function (s, e) { customizeExportToolbar('" + t.Name + "'); }";
+	t.ClientSideEvents.ToolbarItemClick = "function (s, e) { exportToolbarItemClick(s, e); }";
+	t.ClientSideEvents.BeforeExportRequest = "function (s, e) { e.customArgs['exportFormat'] = exportFormat; e.customArgs['exportType'] = exportType; }";
 }).GetHtml()

+ 11 - 12
GreenTree.Nachtragsmanagement.Web/Views/Sites/View.cshtml

@@ -38,9 +38,17 @@
 
 	function onToolbarItemClick(s, e) {
 		if (!s || !e) return;
-		if (IsExportToolbarCommand(e.item.name)) {
-			$("#Format").val(e.item.name);
-			$("#siteExportForm").submit();
+		if (e.item.name == "Print") {
+			parent.$(".printPopupContainer").remove();
+			$.ajax({
+				type: "POST",
+				url: '@Url.Action("ExportPartialSites", "Site")',
+				data: { displayMode: "popup", exportFormat: "" },
+				success: function (response) {
+					parent.$("body").append(response);
+					parent.exportFormat = "pdf";
+				}
+			});
 		} else if (e.item.name == "ToggleColumnChooser") {
 			if (devGridViewSite.IsCustomizationWindowVisible())
 				devGridViewSite.HideCustomizationWindow();
@@ -49,10 +57,6 @@
 		}
 	}
 
-	function IsExportToolbarCommand(command) {
-		return command == "Pdf" || command == "Xlsx" || command == "Xls";
-	}
-
 	function editSite(id) {
 		if (!id) return;
 		$.ajax({
@@ -107,11 +111,6 @@
 	}
 </script>
 
-@using (Html.BeginForm("ExportPartialSites", "Site", FormMethod.Post, new { id = "siteExportForm" }))
-{
-	@Html.Hidden("Format")
-}
-
 @Html.Partial("~/Views/Sites/_SiteGridPartial.cshtml", Model)
 @Html.Partial("~/Views/Shared/_PopupDialogYesNo.cshtml", new GreenTree.Nachtragsmanagement.Web.Models.Global.YesNoDialogModel
 {