using Syncfusion.Windows.Forms.Tools; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Syncfusion.WinForms.Controls; using Syncfusion.Windows.Forms.Utils; using OnDoc.Klassen; using Syncfusion.Windows.Forms; using Model; using OnDoc.DocMgmt; using System.Xml.Linq; using Versandstrasse; using System.IO; using Syncfusion.Pdf; using Database; using System.Net; using Newtonsoft.Json; namespace OnDoc.Versandstrasse { public partial class Versandstrasse : SfForm { private List pakete = new List(); private TreeViewAdvDragHighlightTracker treeViewDragHighlightTracker = null; private TreeNodeAdv currentSourceNode; public Versandstrasse(List pakete) { InitializeComponent(); this.treeViewAdv1.AutoScrolling = ScrollBars.Both; this.Style.TitleBar.BackColor = Theaming.Titelbar(); this.Style.TitleBar.ForeColor = Theaming.TitelFontColor(); this.Style.ShadowOpacity = Theaming.ShadowOpacity; this.Style.InactiveShadowOpacity = Theaming.InactivShadowOpacity; this.treeViewDragHighlightTracker = new TreeViewAdvDragHighlightTracker(this.treeViewAdv1); this.treeViewDragHighlightTracker.QueryAllowedPositionsForNode += new QueryAllowedPositionsEventHandler(this.TreeDragDrop_QueryAllowedPositionsForNode); this.treeViewDragHighlightTracker.QueryDragInsertInfo += new QueryDragInsertInfoEventHandler(treeViewDragHighlightTracker_QueryDragInsertInfo); this.pakete = pakete; } private void load_adressen() { DB db = new DB(AppParams.connectionstring); db.Get_Tabledata("Select * from Antwortadresse order by bezeichnung", false, true); foreach (System.Data.DataRow dr in db.dsdaten.Tables[0].Rows) { TreeNodeAdv node = new TreeNodeAdv(); node.Text = dr["bezeichnung"].ToString(); node.TagObject = dr; treeViewAdvAdresse.Nodes.Add(node); } treeViewAdvAdresse.Enabled = false; treeViewAdvAdresse.SelectedNode = treeViewAdvAdresse.Nodes[0]; } private void Versandstrasse_Load(object sender, EventArgs e) { load_adressen(); Reload_Tree(); } private void Reload_Tree() { treeViewAdv1.Nodes.Clear(); TreeNodeAdv DruckJob; DB db = new DB(AppParams.connectionstring); for (int i = 0; i < pakete.Count; i++) { db.Get_Tabledata("Select bkpar00 from partner where nrpar00=" + pakete[i].partnernr.ToString(), false, true); DruckJob = new TreeNodeAdv(); DruckJob.Text = "Druckpaket " + pakete[i].PaketNr.ToString()+" - " + db.dsdaten.Tables[0].Rows[0][0].ToString(); DruckJob.Tag = "Druckpaket"; DruckJob.TagObject = pakete[i]; treeViewAdv1.Nodes.Add(DruckJob); PopulateDocs(pakete[i], ref DruckJob); } db = null; treeViewAdv1.ExpandAll(); } private void PopulateDocs(Versandpaket paket, ref TreeNodeAdv parentnode) { TreeNodeAdv dokumentnode; for (int i = 0; i < paket.Dokument.Count; i++) { dokumentnode = new TreeNodeAdv(); dokumentnode.Text = paket.Dokument[i].Bezeichnung+" (" + paket.Dokument[i].Partnernr+")"; dokumentnode.Tag = paket.Dokument[i].DokumentID; dokumentnode.TagObject= paket.Dokument[i]; parentnode.Nodes.Add(dokumentnode); } } #region "Treeview" private void treeViewAdv1_DragDrop(object sender, DragEventArgs e) { TreeViewAdv treeView = sender as TreeViewAdv; TreeNodeAdv sourceNode = (TreeNodeAdv)e.Data.GetData(typeof(TreeNodeAdv)); TreeNodeAdv destinationNode = this.treeViewDragHighlightTracker.HighlightNode; TreeViewDropPositions dropPosition = this.treeViewDragHighlightTracker.DropPosition; this.treeViewDragHighlightTracker.ClearHighlightNode(); this.currentSourceNode = null; if (destinationNode != null) { switch (dropPosition) { case TreeViewDropPositions.AboveNode: sourceNode.Move(destinationNode, NodePositions.Previous); break; case TreeViewDropPositions.BelowNode: sourceNode.Move(destinationNode, NodePositions.Next); break; case TreeViewDropPositions.OnNode: sourceNode.Move(destinationNode.Nodes); destinationNode.Expand(); break; } } treeView.SelectedNode = sourceNode; } private void treeViewAdv1_DragLeave(object sender, EventArgs e) { this.treeViewDragHighlightTracker.ClearHighlightNode(); } private void treeViewAdv1_DragOver(object sender, DragEventArgs e) { bool droppable = true; TreeNodeAdv destinationNode = null; TreeViewAdv treeView = sender as TreeViewAdv; Point ptInTree = treeView.PointToClient(new Point(e.X, e.Y)); this.currentSourceNode = null; if (e.Data.GetDataPresent(typeof(TreeNodeAdv))) { destinationNode = treeView.GetNodeAtPoint(ptInTree); TreeNodeAdv sourceNode = (TreeNodeAdv)e.Data.GetData(typeof(TreeNodeAdv)); this.currentSourceNode = sourceNode; droppable = this.CanDrop(sourceNode, destinationNode); //if (droppable == true) { if (destinationNode.Tag.ToString() != "Druckpaket") { droppable = false; } } } else droppable = false; if (droppable) e.Effect = DragDropEffects.Move; else e.Effect = DragDropEffects.None; this.treeViewDragHighlightTracker.SetHighlightNode(destinationNode, ptInTree); } private bool CanDrop(TreeNodeAdv sourceNode, TreeNodeAdv destinationNode) { TreeNodeAdv xdestinationNode = this.treeViewDragHighlightTracker.HighlightNode; TreeViewDropPositions dropPosition = this.treeViewDragHighlightTracker.DropPosition; if (destinationNode == null || destinationNode == sourceNode) return false; else { try { if (xdestinationNode.Level == 1 && dropPosition != TreeViewDropPositions.OnNode) { return false; } if (xdestinationNode.Level == 2 ) { return true; } } catch { } return true; } } private void treeViewAdv1_ItemDrag(object sender, ItemDragEventArgs e) { TreeViewAdv treeViewAdv = sender as TreeViewAdv; TreeNodeAdv[] nodes = e.Item as TreeNodeAdv[]; TreeNodeAdv node = nodes[0]; { DragDropEffects result = treeViewAdv.DoDragDrop(node, DragDropEffects.Move); } } private bool IsDruckPaket(TreeNodeAdv node) { if (node.Tag == null || ("Druckpaket").CompareTo(node.Tag.ToString()) != 0) { return false; } else return true; } private void treeViewDragHighlightTracker_QueryDragInsertInfo(object sender, QueryDragInsertInfoEventArgs args) { args.DragInsertColor = Color.Red; } private void TreeDragDrop_QueryAllowedPositionsForNode(object sender, QueryAllowedPositionsEventArgs e) { if (!this.IsDruckPaket(e.HighlightNode)) { if (e.HighlightNode != this.currentSourceNode) e.AllowedPositions = TreeViewDropPositions.AboveNode | TreeViewDropPositions.BelowNode; else e.AllowedPositions = TreeViewDropPositions.None; this.treeViewDragHighlightTracker.EdgeSensitivityOnTop = e.HighlightNode.Bounds.Height / 2; e.ShowSelectionHighlight = false; } else { this.treeViewDragHighlightTracker.EdgeSensitivityOnTop = e.HighlightNode.Bounds.Height / 4; e.ShowSelectionHighlight = false; } } #endregion private void tsbtnDruckPaketNew_Click(object sender, EventArgs e) { Versandpaket newpaket = new Versandpaket(); newpaket.PaketNr= (treeViewAdv1.Nodes.Count + 1).ToString(); newpaket.Versandoption = "1"; newpaket.GAS = "0"; newpaket.GASAdresse = "0"; newpaket.Mitteilung = ""; newpaket.Dokument = new List(); string NodeText = "Druckpaket " + (treeViewAdv1.Nodes.Count + 1).ToString(); TreeNodeAdv drucknode = new TreeNodeAdv(); drucknode.Text = NodeText; drucknode.Tag = "Druckpaket"; drucknode.TagObject=newpaket; treeViewAdv1.Nodes.Add(drucknode); } private void treeViewAdv1_NodeMouseClick(object sender, TreeViewAdvMouseClickEventArgs e) { TreeNodeAdv node = e.Node; if (node.Level == 1) { GrpPaketDetails.Enabled = true; Versandpaket paket = node.TagObject as Versandpaket; switch (paket.Versandoption) { case "1": rbversandoption1.Checked= true; break; case "2": rbversandoption2.Checked= true;break; case "3": rbversandoption3.Checked= true;break; default: break; } //if (paket.GAS.ToString() == "1"){ // chkGAS.Checked= true; // lbgasadresse.SelectedIndex = Convert.ToInt32(paket.GASAdresse.ToString()); //} else { chkGAS.Checked= false; } } else { if (tscheckboxpreview.Checked) { clsVersandstrasse vs = new clsVersandstrasse(); string dok = vs.Prepare_PDF(node.Tag.ToString(), AppParams.tempdir, AppParams.connectionstring); var stream = new MemoryStream(Convert.FromBase64String(dok)); this.pdfViewerControl1.Load(stream); } GrpPaketDetails.Enabled=false; } } private void button1_Click(object sender, EventArgs e) { Versandpaket paket = treeViewAdv1.SelectedNode.TagObject as Versandpaket; if (rbversandoption1.Checked) { paket.Versandoption = "1"; } if (rbversandoption2.Checked) { paket.Versandoption = "2"; } if (rbversandoption3.Checked) { paket.Versandoption = "3"; } if (chkGAS.Checked) { paket.GAS = "1"; } else { paket.GAS = "0"; } //try { paket.GASAdresse = lbgasadresse.SelectedIndex.ToString(); } catch { paket.GASAdresse= "0"; } paket.verified = true; treeViewAdv1.SelectedNode.TagObject = paket; //pakete.paket.Add(paket); Reload_Tree(); } private void btnSend_Click(object sender, EventArgs e) { panelPrepare.Visible = true; Application.DoEvents(); Cursor = Cursors.WaitCursor; try { Versandpaket paket = treeViewAdv1.SelectedNode.TagObject as Versandpaket; foreach (Versanddokument vsdok in paket.Dokument) { clsVersandstrasse vs = new clsVersandstrasse(); vsdok.dokument = vs.Prepare_PDF(vsdok.DokumentID.ToString(), AppParams.tempdir, AppParams.connectionstring); //string dok = vs.Prepare_PDF(vsdok.DokumentID.ToString(), AppParams.tempdir, AppParams.connectionstring); } Stream[] streams = new Stream[paket.Dokument.Count]; int i = 0; foreach (Versanddokument vsdok in paket.Dokument) { var stream = new MemoryStream(Convert.FromBase64String(vsdok.dokument)); streams[i] = stream; i++; } string stapel = save_stapel(ref streams); var finalestream = new MemoryStream(Convert.FromBase64String(stapel)); this.pdfViewerControl1.Load(finalestream); for (int i1 = 0; i1 < streams.Length; i1++) { streams[i1].Close(); streams[i1].Dispose(); streams[i1] = null; } streams = null; treeViewAdv1.SelectedNode.TagObject = paket; panelVerify.Visible = true; } catch { } panelPrepare.Visible = false; Cursor = Cursors.Default; Application.DoEvents(); } private string save_stapel(ref Stream[] streams) { try { PdfDocument finalDoc = new PdfDocument(); PdfDocumentBase.Merge(finalDoc, streams); MemoryStream outputStream = new MemoryStream(); finalDoc.Save(outputStream); byte[] bytes; bytes = outputStream.ToArray(); return Convert.ToBase64String(bytes); } catch { return ""; } } private void chkGAS_CheckedChanged(object sender, EventArgs e) { if (chkGAS.Checked) { treeViewAdvAdresse.Enabled= true; } else { treeViewAdvAdresse.Enabled = false; } } private void btnSendFinal_Click(object sender, EventArgs e) { panelVerify.Visible = false; SendTo_Versandstrasse(); } private void SendTo_Versandstrasse() { Versandpaket versandpaket = new Versandpaket(); versandpaket = (Versandpaket)treeViewAdv1.SelectedNode.TagObject; versandpaket.send_onbase_doc = true; string jsonstring = JsonConvert.SerializeObject(versandpaket); string URL = AppParams.RESTURI + "api/Send_Versandstrasse"; panelVerify.Visible = false; WebRequest request; var data = Encoding.UTF8.GetBytes(jsonstring); request = WebRequest.Create(URL); request.ContentLength = data.Length; request.ContentType = "application/json"; request.Method = "POST"; request.Headers["Authorization"] = "Bearer " + AppParams.apikey; string response; try { using (Stream requestStream = request.GetRequestStream()) { requestStream.Write(data, 0, data.Length); requestStream.Close(); using (Stream responseStream = request.GetResponse().GetResponseStream()) { using (var reader = new StreamReader(responseStream)) { response = reader.ReadToEnd(); } if (response.ToString().Contains("*archiviert")) { MessageBox.Show("Paket an Versandstrasse übergeben"); } //if (response.StatusCode == HttpStatusCode.OK) //{ // StreamReader reader = new StreamReader(response.GetResponseStream()); // string responseContent = reader.ReadToEnd(); // if (responseContent.Contains("Hinweismeldung:")) // { // MessageBox.Show("Das Paket wurde erfolgreich an die Versandstrasse übergeben:" + Environment.NewLine + responseContent); // treeViewAdv1.SelectedNode.Remove(); // return; // } // Logging.DocLog.Info("Dokumentpaket an Versandstrasse übergeben", "OnDoc", versandpaket.partnernr.ToString(), "", ""); //} //else //{ // MessageBox.Show("Das Paket konnte nicht an die Versandstrasse übergeben werden." + Environment.NewLine + "Fehler: " + response.StatusDescription); // Logging.Logging.Error(URL + ": " + response.StatusCode.ToString() + " / " + response.StatusDescription, "Clinet - DokList GetDocument", ""); //} } } return; } catch { } } } }