Files
BeWoPlaner/BeWo/View/Document/DokumentViewHelper.cs

596 lines
25 KiB
C#

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.DataContracts.Compact;
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.Navigation;
using System.Windows.Threading;
namespace BeWo.View.Document
{
public class DokumentViewHelper
{
public static void OpenTemplateSelectionDialog(long objectOid, TableID tableId, BeWoFolderDC defaultFolderToSave, Action folderSelectedAction)
{
var alleVorlagen = ServiceFacade.DoOperationsServiceSync(s => s.GetDokumentvorlagenForType(tableId));
if (alleVorlagen.Count > 0)
{
DokumentViewHelper.OpenTemplateSelectionDialog(alleVorlagen, tableId, objectOid, null, defaultFolderToSave, folderSelectedAction);
}
}
public static void OpenTemplateSelectionDialog(List<DokumentvorlageDC> alleVorlagen, TableID objectTid, long objectOid, String originalReportUri, BeWoFolderDC defaultFolderToSave, Action folderSelectedAction)
{
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, null);
//view.InitView(tabelle, alleVorlagen, templateFolderList, null, true, false, "");
var beWoWindow = BeWoWindowBuilder.GetBeWoWindow(Translator.Translate("Vorlage auswählen"), view, 500, 600);
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, defaultFolderToSave, folderSelectedAction);
}
beWoWindow.Close();
};
beWoWindow.ShowDialog();
}
}
public static BeWoFolderDC OpenAndSelectBeWoFolderSelectionDialog(TableID objectTid, long objectOid, String fileName, BeWoFolderDC defaultFolder)
{
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, defaultFolder);
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<ReportTemplateDC> 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);
vm.SortName = String.Format("0_{0}", dc.Name); //Für Sortieren. Die Ordner sollen oberhalb der Vorlagen einsortiert werden
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<VorlagentabelleDC> vorlagentabellen, List<BeWoFolderDC> 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<BeWoFolderDC>() }
};
DocumentTreeItemVM vm = new DocumentTreeItemVM(dc);
vm.SortName = String.Format("0_{0}", dc.Name); //Für Sortieren. Die Ordner sollen oberhalb der Vorlagen einsortiert werden
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<DokumentvorlageDC> 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);
folder_vm.SortName = String.Format("z_{0}", dc.Name); //Für Sortieren. Die Ordner sollen oberhalb der Vorlagen einsortiert werden
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<BeWoFolderDC> 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<FileAttachmentDC>(),
// 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<BeWoFolderDC> 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<FileAttachmentDC>(),
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);
folder_vm.SortName = String.Format("0_{0}", dc.Name); //Für Sortieren. Die Ordner sollen oberhalb der Vorlagen einsortiert werden
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<BeWoFolderDC> 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<FileAttachmentDC>(),
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, BeWoFolderDC defaultFolder, Action folderSelectedAction)
{
ServiceFacade.DoOperationsServiceAsync(s => s.CreateRtfDocumentFromTemplate(vorlage.DokumentvorlageOid.Value, objectTid, new List<long> { 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, defaultFolder);
if (selectedFolder != null)
{
var newRtfText = control.RtfText;
var filename = selectedFolder.Name;
window.Close();
SaveRtfInBeWoFolder(defaultFolder, newRtfText, filename, objectTid, objectOid, folderSelectedAction);
}
};
control.ButtonCancelClicked += () =>
{
window.Close();
};
window.ShowDialog();
}));
//var rtf = ServiceFacade.DoOperationsServiceSync(s => s.CreateRtfDocumentFromTemplate(vorlage.DokumentvorlageOid.Value, objectTid, new List<long> { objectOid }));
//string url = GenerateURL(vorlage.DokumentvorlageOid.Value, objectTid, new List<long> { objectOid });
//BeWoUtils.NavigateToReportUri(url, vorlage.Name);
}
private static void SaveRtfInBeWoFolder(BeWoFolderDC selectedFolder, string rtfText, string filename, TableID objectTid, long objectOid, Action uploadFinished)
{
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();
if (uploadFinished != null)
{
uploadFinished();
}
},
() =>
{
upload.Dispose();
ms.Dispose();
if (uploadFinished != null)
{
uploadFinished();
}
});
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Exclamation);
}
}
public static string GenerateURL(long vorlage, TableID objectTid, List<long> 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");
}
}
}