You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

446 lines
17 KiB

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<Versandpaket> pakete = new List<Versandpaket>();
private TreeViewAdvDragHighlightTracker treeViewDragHighlightTracker = null;
private TreeNodeAdv currentSourceNode;
public Versandstrasse(List<Versandpaket> 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<Versanddokument>();
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 { }
}
}
}