using BeWo.Core; using BeWo.ServiceProxy; using BeWo.View.Windows; using BeWo.ViewModel; using BS.Shared; using BS.Shared.Core; using BS.Shared.DataContracts; using BS.Shared.Translation; using DevExpress.Utils; using DevExpress.Xpf.Grid; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Media.Imaging; using System.Windows.Threading; namespace BeWo.View.Document { public class DokumentViewHelper { public static void OpenTemplateSelectionDialog(List alleVorlagen, TableID objectTid, long objectOid, String originalReportUri) { var alleVorlagenTabellen = ServiceFacade.DoOperationsServiceSync(s => s.GetVorlagentabelleDCs()); var tabelle = alleVorlagenTabellen.FirstOrDefault(v => v.VorlagentabelleObjectTid.HasValue && v.VorlagentabelleObjectTid.Value == (int)objectTid); if (tabelle != null) { var view = new SingleTemplateSelectionView(); var defaultBerichte = ServiceFacade.DoOperationsServiceSync(x => x.GetReportTemplates(String.Format("TemplateSelection?Tid={0}&Oid={1}", objectTid, objectOid))); var templateFolderList = VMFactory.CreateFolderList(TableID.Vorlagentabelle, tabelle.VorlagentabelleOid.Value); view.InitView(tabelle, alleVorlagen, templateFolderList, null, true, false, "", defaultBerichte); //view.InitView(tabelle, alleVorlagen, templateFolderList, null, true, false, ""); var beWoWindow = BeWoWindowBuilder.GetBeWoWindow(Translator.Translate("Vorlage auswählen"), view, 500, 500); view.ButtonCancelClicked += () => beWoWindow.Close(); view.ButtonCreateForSelectionClicked += () => { if (view.SelectedReportTemplate != null) { BeWoUtils.NavigateToReportUri(originalReportUri + "&template=" + (view.SelectedReportTemplate.ObjectOid.HasValue ? view.SelectedReportTemplate.ObjectOid.Value.ToString() : "-1"), "Druckvorschau"); } else { PrintTemplate(view.SelectedTemplate, objectTid, objectOid); } beWoWindow.Close(); }; beWoWindow.ShowDialog(); } } public static BeWoFolderDC OpenAndSelectBeWoFolderSelectionDialog(TableID objectTid, long objectOid, String fileName) { BeWoFolderDC selectedFolder = null; var view = new SingleTemplateSelectionView(); var customerFolderList = VMFactory.CreateFolderList(objectTid, objectOid); //var alleVorlagenTabellen = ServiceFacade.DoOperationsServiceSync(s => s.GetVorlagentabelleDCs()); //var tabelle = alleVorlagenTabellen.FirstOrDefault(v => v.VorlagentabelleObjectTid.HasValue && v.VorlagentabelleObjectTid.Value == (int)objectTid); //if (tabelle != null) //{ view.InitView(null, null, null, customerFolderList, false, true, fileName, null); var beWoWindow = BeWoWindowBuilder.GetBeWoWindow(Translator.Translate("Ordner auswählen"), view, 500, 500); view.ButtonCancelClicked += () => beWoWindow.Close(); view.ButtonCreateForSelectionClicked += () => { selectedFolder = view.SelectedFolder; beWoWindow.Close(); }; beWoWindow.ShowDialog(); //} return selectedFolder; } public static void CreateDefaultReportsTreeViewItems(TreeListControl treeControl, IList templates, bool expandItems) { if (templates != null && templates.Count > 0) { treeControl.BeginDataUpdate(); TreeListNode rootNode = new TreeListNode(); DocumentTreeItemDC dc = new DocumentTreeItemDC() { DocTreeItemOid = 9999991, Name = "Berichte", Table = BS.Shared.TableID.ReportTemplate, Node = rootNode }; DocumentTreeItemVM vm = new DocumentTreeItemVM(dc); rootNode.Content = vm; rootNode.IsExpandButtonVisible = DefaultBoolean.True; rootNode.IsExpanded = expandItems; treeControl.View.Nodes.Add(rootNode); rootNode.Image = LoadFolderImage(); foreach (var template in templates) { var node = new TreeListNode(); dc = new DocumentTreeItemDC() { DocTreeItemOid = null, ParentOid = 9999991, Name = template.DisplayName, Table = BS.Shared.TableID.ReportTemplate, ObjectOid = template.Oid, Node = node }; vm = new DocumentTreeItemVM(dc); node.Content = vm; rootNode.Nodes.Add(node); node.IsExpandButtonVisible = DefaultBoolean.False; node.Image = LoadDocumentImage(); } treeControl.EndDataUpdate(); } } public static void CreateTemplateTreeViewItems(TreeListControl treeControl, IList vorlagentabellen, List allFolder, bool expandItems) { treeControl.BeginDataUpdate(); if (vorlagentabellen != null) { foreach (var table in vorlagentabellen) { TreeListNode node = new TreeListNode(); DocumentTreeItemDC dc = new DocumentTreeItemDC() { DocTreeItemOid = table.VorlagentabelleOid, ParentOid = null, Name = table.Tabellenname, Table = BS.Shared.TableID.Vorlagentabelle, ObjectOid = table.VorlagentabelleOid, Node = node, BeWoFolderDC = new BeWoFolderDC { Name = "RootFolder", SubFolders = new List() } }; DocumentTreeItemVM vm = new DocumentTreeItemVM(dc); node.Content = vm; treeControl.View.Nodes.Add(node); node.IsExpandButtonVisible = DefaultBoolean.True; node.IsExpanded = expandItems; node.Image = LoadImage(table.ImageName); } } if (allFolder != null && allFolder.Count > 0) { AddFolderToTreeView(treeControl, allFolder, expandItems); } treeControl.EndDataUpdate(); } public static void AddTemplatesToTreeView(TreeListControl treeControl, List allTemplates, bool expandItems) { treeControl.BeginDataUpdate(); foreach (var template in allTemplates) { TreeListNode parentNode = FindParentNodeForTemplate(treeControl.View.Nodes, template); if (parentNode != null) { parentNode.IsExpandButtonVisible = DefaultBoolean.True; var parentVm = parentNode.Content as DocumentTreeItemVM; DocumentTreeItemDC dc = new DocumentTreeItemDC() { DocTreeItemOid = template.DokumentvorlageOid, ParentOid = parentVm.DocTreeItemOid, Name = template.Name, Dokumentvorlage = template, Table = TableID.Dokumentvorlage }; DocumentTreeItemVM folder_vm = new DocumentTreeItemVM(dc); var newFolderNode = new TreeListNode() { Content = folder_vm, IsExpandButtonVisible = DefaultBoolean.False, Tag = template, IsExpanded = expandItems, Image = LoadDocumentImage() }; dc.Node = newFolderNode; parentNode.Nodes.Add(newFolderNode); } } treeControl.EndDataUpdate(); } private static TreeListNode FindParentNodeForTemplate(TreeListNodeCollection nodes, DokumentvorlageDC template) { foreach (TreeListNode node in nodes) { var docVm = node.Content as DocumentTreeItemVM; if (docVm != null && docVm.DataContract.Dokumentvorlage == null && docVm.DocTreeItemOid.HasValue && docVm.DocTreeItemOid == template.Parent) { return node; } var childNode = FindParentNodeForTemplate(node.Nodes, template); if (childNode != null) { return childNode; } } return null; } public static void AddFolderToTreeView(TreeListControl treeControl, List folders, bool expandItems) { treeControl.BeginDataUpdate(); if (treeControl.View.Nodes.Count > 0) // Wenn Nodes vorhanden sind (Vorlagen Ordner) hänge die Folder an die Vorlagen Objekte { foreach (var node in treeControl.View.Nodes) { AddFolderToNode(treeControl, node, folders, expandItems); } } else { AddFolderToNode(treeControl, null, folders, expandItems); //foreach (var folder in folders) //{ // DocumentTreeItemDC dc = new DocumentTreeItemDC() // { // DocTreeItemOid = folder.BeWoFolderOid, // Name = folder.Name, // FilesInFolder = new List(), // BeWoFolderDC = folder // }; // DocumentTreeItemVM folder_vm = new DocumentTreeItemVM(dc); // var newFolderNode = new TreeListNode() // { // Content = folder_vm, // IsExpandButtonVisible = folder.SubFolders != null && folder.SubFolders.Count > 0 ? DefaultBoolean.True : DefaultBoolean.False, // IsExpanded = expandItems, // Tag = false, // Image = LoadFolderImage() // }; // dc.Node = newFolderNode; // AddFolderToNode(newFolderNode, folder.SubFolders, expandItems); // //} // } // else // { // if (folder.ObjectOid.HasValue && folder.ObjectOid == parentVm.DocTreeItemOid) // { // AddFolderToNode(parentNode, folder.SubFolders, expandItems); // } // } //} } treeControl.EndDataUpdate(); } private static void AddFolderToNode(TreeListControl treeControl, TreeListNode parentNode, List folders, bool expandItems) { if (folders != null) { DocumentTreeItemVM parentVm = null; if (parentNode != null) { parentVm = parentNode.Content as DocumentTreeItemVM; } foreach (var folder in folders) { if (folder.BeWoFolderOid.HasValue || (folder.Name == "Alle Ordner" && folder.ObjectTid != TableID.Vorlagentabelle))// && folder.ObjectTid != { //if (parentVm != null && parentVm.DocTreeItemOid == folder.ObjectOid) //{ DocumentTreeItemDC dc = new DocumentTreeItemDC() { DocTreeItemOid = folder.BeWoFolderOid, ParentOid = parentVm?.DocTreeItemOid, Name = folder.Name, FilesInFolder = new List(), BeWoFolderDC = folder, Table = parentVm != null ? parentVm.DataContract.Table : folder.ObjectTid, ObjectOid = parentVm?.DataContract.ObjectOid }; if (folder.Files.Count != 0) { foreach (var file in folder.Files) { dc.FilesInFolder.Add(file); } } DocumentTreeItemVM folder_vm = new DocumentTreeItemVM(dc); var newFolderNode = new TreeListNode() { Content = folder_vm, IsExpandButtonVisible = folder.SubFolders != null && folder.SubFolders.Count > 0 ? DefaultBoolean.True : DefaultBoolean.False, IsExpanded = expandItems, Tag = false, Image = LoadFolderImage() }; dc.Node = newFolderNode; if (parentNode != null) { parentNode.Nodes.Add(newFolderNode); } else { treeControl.View.Nodes.Add(newFolderNode); } AddFolderToNode(treeControl, newFolderNode, folder.SubFolders, expandItems); //} } else { if (folder.ObjectOid.HasValue && parentVm != null && folder.ObjectOid == parentVm.DocTreeItemOid) { AddFolderToNode(treeControl, parentNode, folder.SubFolders, expandItems); } } } } } private static void GenerateFolderStructureForSelectedNode(TreeListNode node, List folderDCs, bool hideAlleOrdner) { if (node.Nodes.Count == 0) { var content = node.Content as DocumentTreeItemVM; foreach (var folder in folderDCs) { TreeListNode newNode_folder = null; if (folder.BeWoFolderOid.HasValue || !hideAlleOrdner) { DocumentTreeItemDC folder_dc = new DocumentTreeItemDC() { DocTreeItemOid = folder.BeWoFolderOid, ParentOid = content.DocTreeItemOid, Name = folder.Name, FilesInFolder = new List(), BeWoFolderDC = folder, Table = content.DataContract.Table, ObjectOid = content.DataContract.ObjectOid }; if (folder.Files.Count != 0) { foreach (var file in folder.Files) { folder_dc.FilesInFolder.Add(file); } } DocumentTreeItemVM folder_vm = new DocumentTreeItemVM(folder_dc); newNode_folder = new TreeListNode() { Content = folder_vm, IsExpandButtonVisible = folder.SubFolders != null && folder.SubFolders.Count > 0 ? DefaultBoolean.True : DefaultBoolean.False, Tag = false, Image = LoadFolderImage() }; folder_dc.Node = newNode_folder; node.Nodes.Add(newNode_folder); } else { newNode_folder = node; if (content.DataContract.BeWoFolderDC == null) { content.DataContract.BeWoFolderDC = folder; } } if (folder.SubFolders.Count != 0) { GenerateFolderStructureForSelectedNode(newNode_folder, folder.SubFolders, hideAlleOrdner); } } } } //public static DokumentvorlageVM EditTemplate(VorlagentabelleDC vt, DokumentvorlageVM vm) //{ // var control = new VorlageEditView(); // control.InitView(vt, vm); // var beWoWindow = new BeWoWindow // { // rootGroupBox = { Header = "Vorlage bearbeiten" }, // Height = this.Height, // Width = 1200, // MinWidth = 550, // WindowStartupLocation = WindowStartupLocation.CenterOwner, // GroupBoxContent = control, // Owner = BeWoApp.CurrentBeWo.MainWindow // }; // bool saved = false; // control.ButtonSavedClicked += () => // { // saved = true; // if (control.ViewModel.IsNew || control.ViewModel.IsDirty) // { // var dc = SaveInDatabase(control.ViewModel); // vm.DataContract = dc; // RefreshSelectedList(); // } // beWoWindow.Close(); // }; // control.ButtonCancelClicked += () => // { // beWoWindow.Close(); // }; // beWoWindow.ShowDialog(); // if (!saved) // { // return null; // } // return control.ViewModel; //} private static void PrintTemplate(DokumentvorlageDC vorlage, TableID objectTid, long objectOid) { ServiceFacade.DoOperationsServiceAsync(s => s.CreateRtfDocumentFromTemplate(vorlage.DokumentvorlageOid.Value, objectTid, new List { objectOid }), rtf => BeWoApp.CurrentBeWo.Dispatcher.BeginInvoke( DispatcherPriority.Normal, (Action)delegate { var control = new RtfEditView(); control.InitView(rtf); var window = BeWoWindowBuilder.GetBeWoWindow(vorlage.Name, control, Math.Min(BeWoApp.MainControl.ActualHeight, 1000), Math.Min(BeWoApp.MainControl.ActualWidth, 1600)); control.ButtonSavedClicked += () => { var selectedFolder = OpenAndSelectBeWoFolderSelectionDialog(objectTid, objectOid, vorlage.Name); if (selectedFolder != null) { var newRtfText = control.RtfText; var filename = selectedFolder.Name; window.Close(); SaveRtfInBeWoFolder(selectedFolder, newRtfText, filename, objectTid, objectOid); } }; control.ButtonCancelClicked += () => { window.Close(); }; window.ShowDialog(); })); //var rtf = ServiceFacade.DoOperationsServiceSync(s => s.CreateRtfDocumentFromTemplate(vorlage.DokumentvorlageOid.Value, objectTid, new List { objectOid })); //string url = GenerateURL(vorlage.DokumentvorlageOid.Value, objectTid, new List { objectOid }); //BeWoUtils.NavigateToReportUri(url, vorlage.Name); } private static void SaveRtfInBeWoFolder(BeWoFolderDC selectedFolder, string rtfText, string filename, TableID objectTid, long objectOid) { try { var ms = new System.IO.MemoryStream(Encoding.Default.GetBytes(rtfText)); var upload = new ProgressStream(ms); var lUlPackage = new UploadPackage(selectedFolder.BeWoFolderOid, 0, String.Format("{0}.{1}", filename, "rtf"), "", objectOid, (int)objectTid, upload); ServiceFacade.DoStreamingServiceAsync( s => s.UploadDocument(lUlPackage), r => { upload.Dispose(); ms.Dispose(); }, () => { upload.Dispose(); ms.Dispose(); }); } catch (Exception ex) { MessageBox.Show(ex.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Exclamation); } } public static string GenerateURL(long vorlage, TableID objectTid, List objectOids) { string url = BeWoApp.SiteOfOrigin + "/ReportView.aspx?"; url += "&vorlage=" + vorlage; url += "&obj="; foreach (var oid in objectOids) { if (objectOids.IndexOf(oid) == objectOids.Count - 1) url += oid; else url += oid + ","; } url += "&table=" + (int)objectTid; url += "&type=" + Utils.EnumName(ReportTypes.VorlagenReport); url = BeWoWpfUtils.GetHTMLEncodedURL(url); return url; } private static BitmapImage LoadImage(string imageName) { if (String.IsNullOrEmpty(imageName)) { return null; } return new BitmapImage(new Uri("/Ressources/Icons/" + imageName + ".png", UriKind.Relative)); } private static BitmapImage LoadFolderImage() { return LoadImage("Folder"); } private static BitmapImage LoadDocumentImage() { return LoadImage("Document48"); } } }