using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Runtime.Remoting.Messaging; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Xml.Linq; using Database; using DOCGEN.Klassen; using Helper; using Microsoft.Office.Interop.Word; using Model; using NLog; using OnDoc.DocMgmt; using OnDoc.Klassen; using OnDoc.UIControls.Administrator; using Syncfusion.Windows.Forms.Tools; using Syncfusion.Windows.Forms.Tools.Renderers; using Syncfusion.WinForms.Controls; using Syncfusion.WinForms.DataGrid; using Syncfusion.WinForms.DataGrid.Interactivity; namespace OnDoc.UIControls { public partial class Serienbrief : SfForm { //private int dokumenttypnr = 0; private int officevorlagenr = 0; private int profilnr = 0; private serienbrief sb = new serienbrief(); private int serienbriefnr = 0; //private DataSet dsempfaenger = new DataSet(); private int selectedsbnr = 0; public Serienbrief() { InitializeComponent(); this.Style.TitleBar.BackColor = Theaming.Titelbar(); this.Style.TitleBar.ForeColor = Theaming.TitelFontColor(); } public Serienbrief(int profilnr) { InitializeComponent(); this.Style.TitleBar.BackColor = Theaming.Titelbar(); this.Style.TitleBar.ForeColor = Theaming.TitelFontColor(); this.profilnr = profilnr; } private void Serienbrief_Load(object sender, EventArgs e) { Refresh_Lists(); Refresh_Team(); } private void Refresh_Lists() { DB db = new DB(AppParams.connectionstring); db.Get_Tabledata("Select nreintrag, bezeichnung from Postzustellung where aktiv=1 order by bezeichnung", false, true); cbboxpostzustellung.DataSource = db.dsdaten.Tables[0]; cbboxpostzustellung.ValueMember = "nreintrag"; cbboxpostzustellung.DisplayMember = "bezeichnung"; db.clear_parameter(); db.Get_Tabledata("SP_Dokumentbearbeitung_Mitarbeiter", true, false); cbboxzustaendigmitarbeiter.DataSource = db.dsdaten.Tables[0]; cbboxzustaendigmitarbeiter.DisplayMember = "name"; cbboxzustaendigmitarbeiter.ValueMember = "mitarbeiternr"; cbboxzustaendigmitarbeiter.SelectedValue = AppParams.CurrentMitarbieter; cbboxunterschriftlinks.DataSource = db.dsdaten.Tables[0]; cbboxunterschriftlinks.DisplayMember = "name"; cbboxunterschriftlinks.ValueMember = "mitarbeiternr"; cbboxunterschriftrechts.DataSource = db.dsdaten.Tables[0]; cbboxunterschriftrechts.DisplayMember = "name"; cbboxunterschriftrechts.ValueMember = "mitarbeiternr"; cbboxverantwortlich.DataSource = db.dsdaten.Tables[0]; cbboxverantwortlich.DisplayMember = "name"; cbboxverantwortlich.ValueMember = "mitarbeiternr"; cbboxverantwortlich.SelectedValue = AppParams.CurrentMitarbieter; } private void Refresh_Team() { DB dbteam = new DB(AppParams.connectionstring); dbteam.clear_parameter(); dbteam.add_parameter("@profilnr", profilnr.ToString()); dbteam.add_parameter("@mitarbeiternr", cbboxzustaendigmitarbeiter.SelectedValue.ToString()); dbteam.Get_Tabledata("sp_dokumentbearbeitung_team", true, false); cbboxteam.DataSource = null; cbboxteam.DataSource = dbteam.dsdaten.Tables[0]; cbboxteam.ValueMember = "teamnr"; cbboxteam.DisplayMember = "bezeichnung"; this.cbboxteam.SelectedIndex = 0; } private void RibbonButtonExit_Click(object sender, EventArgs e) { this.Close(); } private void RibbonButtonExcelImport_Click(object sender, EventArgs e) { System.Data.DataTable importdata = new System.Data.DataTable(); openFileDialog1.Filter = "Excel-Dateien files (*.xlsx)|*.xlsx|CSV-Dateien (*.csv)|*.csv|Alle Dateien (*.*)|*.*"; openFileDialog1.FilterIndex = 0; if (openFileDialog1.ShowDialog() == DialogResult.OK) { ExcelNet.ExcelReader reader = new ExcelNet.ExcelReader(); string selected_sheetname = ""; var sheets = new List(); sheets = reader.Get_ExcelSheets(openFileDialog1.FileName); if (sheets.Count > 1) { DocMgmt.Serienbrief_Sheetselect sheetselect = new DocMgmt.Serienbrief_Sheetselect(sheets); sheetselect.ShowDialog(); if (sheetselect.DialogResult == DialogResult.OK) { selected_sheetname = sheetselect.get_selected_sheet(); } else { return; } } else { selected_sheetname = sheets[0]; } reader.Excel_To_Datatabable(openFileDialog1.FileName, selected_sheetname, true, ref importdata); if (importdata.Rows.Count < 1) { MessageBox.Show("Die ausgewählten Daten können nicht verwendet werden.", "Import", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (importdata.Columns[0].Caption.ToUpper() != "PARTNERNR") { MessageBox.Show("Die importierten Daten enthalten keine Spalte 'Partnernr'. Der Vorgang wird abgebrochen.", "Import", MessageBoxButtons.OK, MessageBoxIcon.Error); importdata.Rows.Clear(); importdata.Columns.Clear(); return; } DB dB = new DB(AppParams.connectionstring); sb.dsempfaenger.Tables[0].Rows.Clear(); foreach (System.Data.DataRow dr in importdata.Rows) { System.Data.DataRow r1 = sb.dsempfaenger.Tables[0].NewRow(); foreach (DataColumn col in sb.dsempfaenger.Tables[0].Columns) { try { r1[col.ColumnName] = dr[col.ColumnName]; } catch { r1[col.ColumnName] = ""; } } r1["STATUS"] = 0; r1["FEHLERCODE"] = 0; dB.Get_Tabledata("Select bkpar00 from partner where nrpar00=" + r1[0].ToString(), false, true); if (dB.dsdaten.Tables[0].Rows.Count < 1) r1["Fehlercode"] = 1; else r1["fehlercode"] = 0; r1[1] = dB.dsdaten.Tables[0].Rows[0][0].ToString(); sb.dsempfaenger.Tables[0].Rows.Add(r1); } dB = null; refresh_empfaenger(sb.dsempfaenger.Tables[0]); //sfDataGridEmpfaenger.DataSource = importdata; } } private void refresh_empfaenger(System.Data.DataTable dt) { sfDataGridEmpfaenger.DataSource = null; sfDataGridEmpfaenger.DataSource = dt; //sfDataGridEmpfaenger.Columns["STATUS"].Visible = false; //sfDataGridEmpfaenger.Columns["FEHLERCODE"].Visible = false; //sfDataGridEmpfaenger.Columns["BLKUNDE"].Visible = false; //sfDataGridEmpfaenger.Columns["DOKUMENT_GEDRUCKT"].Visible = false; //sfDataGridEmpfaenger.Columns["DOKUMENTID"].Visible = false; //sfDataGridEmpfaenger.Columns["DOKUMENTIDBDR"].Visible = false; //sfDataGridEmpfaenger.Columns["ERSTELLER"].Visible = false; //sfDataGridEmpfaenger.Columns["DRUCKJOBID"].Visible = false; //sfDataGridEmpfaenger.Columns["AKTIV"].Visible = false; update_zahlen(); } private void init_empfaenger(int serienbriefnr) { Database.DB db = new DB(AppParams.connectionstring); db.Get_Tabledata("Select dbo.BinaryToBase64(xmldata) as Data from edex_sb_empfaenger where serienbriefnr=" + serienbriefnr.ToString(), false, true); Base64Helper bh = new Base64Helper(); bh.Base64 = db.dsdaten.Tables[0].Rows[0][0].ToString(); string xml = bh.DecodeBase64(); string filename = AppParams.tempdir + @"\tmpsb.xml"; System.IO.File.WriteAllText(filename, xml); //dsempfaenger.Tables.Clear(); //dsempfaenger.ReadXml(filename); //dsempfaenger.Tables[0].Columns.Add("Status"); //dsempfaenger.Tables[0].Columns.Add("Error"); sb.dsempfaenger = new DataSet(); sb.dsempfaenger.Tables.Clear(); sb.dsempfaenger.ReadXml(filename); sb.dsempfaenger.AcceptChanges(); refresh_empfaenger(sb.dsempfaenger.Tables[0]); System.IO.File.Delete(filename); } private void RibbonButtonNew_Click(object sender, EventArgs e) { OnDoc.DocMgmt.DokTypSelect DokTypSelect = new OnDoc.DocMgmt.DokTypSelect(); DokTypSelect.vorlagentype = 1; DokTypSelect.ShowDialog(this); if (DokTypSelect.DialogResult == DialogResult.OK) { this.sb = null; this.sb = new serienbrief(); sb.dokumenttypnr = DokTypSelect.dokumenttypnr; update_serienbrief_details(true, sb.dokumenttypnr, 0); init_empfaenger(0); vorlagenfelder(sb.dokumenttypnr); refresh_empfaenger(sb.dsempfaenger.Tables[0]); update_screen(); update_serienbriefdaten(true); vorlage_auslesen_und_speichern(); SerienbriefBearbeitung sbe = new SerienbriefBearbeitung(sb); sb.dsempfaenger.Tables.Add(sbe.init_used_felder(false).Copy()); sb.dsempfaenger.Tables[sb.dsempfaenger.Tables.Count - 1].TableName = "UsedFelder"; update_serienbriefdaten(false); } else { this.GrpDokumentInhalt.Enabled = false; return; } } private void vorlage_auslesen_und_speichern() { DB dB = new DB(AppParams.connectionstring); dB.Get_ApplicationType_from_Vorlage(sb.officevorlagenr); string Apptype = ""; Apptype = dB.dsdaten.Tables[0].Rows[0][1].ToString(); string filename = dB.get_vorlage_to_file(sb.officevorlagenr.ToString(), AppParams.tempdir, sb.serienbriefnr.ToString() + "." + Apptype); sb.filename = dB.save_sb_vorlage_to_db(filename, Apptype, sb.serienbriefnr); } private void vorlagenfelder(int dokumenttypnr) { DB db = new DB(AppParams.connectionstring); db.clear_parameter(); db.add_parameter("@dokumenttypnr", sb.dokumenttypnr.ToString()); db.Get_Tabledata("sp_edex_sb_get_vorlagenfelder", true, false); string s = ""; for (int i = 0, loopTo = db.dsdaten.Tables[0].Rows.Count - 1; i <= loopTo; i++) { try { string X; X = sb.dsempfaenger.Tables[0].Rows[0][db.dsdaten.Tables[0].Rows[i][0].ToString()].ToString(); } catch { sb.dsempfaenger.Tables[0].Columns.Add(db.dsdaten.Tables[0].Rows[i][0].ToString()); sb.dsempfaenger.Tables[0].Rows[0][db.dsdaten.Tables[0].Rows[i][0].ToString()] = ""; sb.dsempfaenger.Tables[1].Columns.Add(db.dsdaten.Tables[0].Rows[i][0].ToString()); try { if (Convert.ToBoolean(db.dsdaten.Tables[0].Rows[i][1]) == true) { sb.dsempfaenger.Tables[1].Rows[0][db.dsdaten.Tables[0].Rows[i][0].ToString()] = 1; } else { sb.dsempfaenger.Tables[1].Rows[0][db.dsdaten.Tables[0].Rows[i][0].ToString()] = 0; } } catch { sb.dsempfaenger.Tables[1].Rows[0][db.dsdaten.Tables[0].Rows[i][0].ToString()] = 0; } s = s + "- " + db.dsdaten.Tables[0].Rows[i][0].ToString() + System.Environment.NewLine; } } sb.dsempfaenger.AcceptChanges(); if (s != "") { MessageBox.Show("Folgende Spalten wurden aufgrund der gewählten Vorlage zur Liste hinzugefügt" + System.Environment.NewLine + s, "Serienbrief", MessageBoxButtons.OK, MessageBoxIcon.Information); } //foreach (System.Data.DataRow dr in db.dsdaten.Tables[0].Rows) //{ // try // { // string x; // x = dsempfaenger.Tables[0].Rows[0][dr[0].ToString()].ToString(); // } // catch // { // } // dsempfaenger.Tables[0].Columns.Add(dr[0].ToString()); //} } private void update_serienbrief_details(bool newsb = false, int dokumenttypnr = 0, int sbnummer = 0) { DB db = new DB(AppParams.connectionstring); if (newsb) { db.Get_Tabledata("Select bezeichnung,office_vorlagenr from dokumenttyp where dokumenttypnr=" + sb.dokumenttypnr.ToString(), false, true); sb.bezeichnung = db.dsdaten.Tables[0].Rows[0][0].ToString(); sb.officevorlagenr = Convert.ToInt32(db.dsdaten.Tables[0].Rows[0][1]); } } private void update_serienbriefdaten(bool newsb) { sb.bezeichnung = this.txtbezeichnung.Text; sb.verantwortlich = Convert.ToInt32(this.cbboxverantwortlich.SelectedValue.ToString()); if (newsb) { sb.erstellt_am = DateTime.Now; } sb.aktiv = true; sb.mutiert_am = DateTime.Now; sb.mutierer = AppParams.CurrentMitarbieter; sb.verantwortlich = AppParams.CurrentMitarbieter; try { sb.postzustellung = Convert.ToInt32(cbboxpostzustellung.SelectedValue.ToString()); } catch { sb.postzustellung = 0; } try { sb.unterschriftlinks = Convert.ToInt32(cbboxunterschriftlinks.SelectedValue.ToString()); } catch { sb.unterschriftlinks = 0; } try { sb.unterschriftrechts = Convert.ToInt32(cbboxunterschriftrechts.SelectedValue.ToString()); } catch { sb.unterschriftrechts = 0; } try { sb.team = Convert.ToInt32(cbboxteam.SelectedValue.ToString()); } catch { sb.team = 0; } DB db = new DB(AppParams.connectionstring); sb.serienbriefnr = db.Save_Serienbrief(sb, AppParams.tempdir); db.save_sb_vorlage_to_db(sb.filename, "", sb.serienbriefnr); } private void treeViewAdv1_NodeMouseClick(object sender, TreeViewAdvMouseClickEventArgs e) { } private void update_zahlen() { try { sb.dsempfaenger.AcceptChanges(); DataView dv = new DataView(sb.dsempfaenger.Tables[0]); dv.RowFilter = "Status = 0"; treeViewAdv1.Nodes[0].Text = "In Bearbeitung (" + dv.Count.ToString() + ")"; dv.RowFilter = "Status =-1"; treeViewAdv1.Nodes[1].Text = "Fehlerhaft (" + dv.Count.ToString() + ")"; if (dv.Count > 0) treeViewAdv1.Nodes[1].TextColor = Color.Red; else treeViewAdv1.Nodes[1].TextColor= Color.Black; dv.RowFilter = "Status = 1"; treeViewAdv1.Nodes[2].Text = "Generiert (" + dv.Count.ToString() + ")"; dv.RowFilter = "Status = 2"; treeViewAdv1.Nodes[3].Text = "Abgeschlossen (" + dv.Count.ToString() + ")"; treeViewAdv1.SelectedNode = treeViewAdv1.Nodes[0]; } catch { } } private void treeViewAdv1_AfterSelect(object sender, EventArgs e) { { string nodetext = treeViewAdv1.SelectedNode.Text; DataView dv = new DataView(sb.dsempfaenger.Tables[0]); switch (nodetext.Substring(0, 5)) { case "In Be": dv.RowFilter = "Status = 0"; sfDataGridEmpfaenger.DataSource = null; sfDataGridEmpfaenger.DataSource = dv; break; case "Fehle": dv.RowFilter = "Status=-1"; sfDataGridEmpfaenger.DataSource = null; sfDataGridEmpfaenger.DataSource = dv; break; case "Gener": dv.RowFilter = "Status = 1"; sfDataGridEmpfaenger.DataSource = null; sfDataGridEmpfaenger.DataSource = dv; break; case "Abges": dv.RowFilter = "Status = 2"; sfDataGridEmpfaenger.DataSource = null; sfDataGridEmpfaenger.DataSource = dv; break; } } } private void ribbonbuttonsave_Click(object sender, EventArgs e) { update_serienbriefdaten(false); } private void RibbonButtonOpen_Click(object sender, EventArgs e) { GrpEmpfaenger.Visible = false; GrpDokumentInhalt.Visible = false; pnlLoad.Visible = true; pnlLoad.Dock = DockStyle.Top; DB db = new DB(AppParams.connectionstring); db.clear_parameter(); db.add_parameter("@mitarbeiternr", AppParams.CurrentMitarbieter.ToString()); db.Get_Tabledata("dbo.sp_edex_sb_get_serienbriefe", true, false); sfdatagridsbload.DataSource = null; sfdatagridsbload.DataSource = db.dsdaten.Tables[0]; btnsbloadok.Left = pnlLoad.Width - btnsbloadok.Width - 20; if (sfdatagridsbload.RowCount == 0) this.btnsbloadok.Enabled = false; // vorlage_auslesen_und_speichern(); System.Windows.Forms.Application.DoEvents(); } private void bntsbloadok_Click(object sender, EventArgs e) { DB db = new DB(AppParams.connectionstring); sb = new serienbrief(); sb.dsempfaenger = new DataSet(); sb.serienbriefnr = selectedsbnr; sb = db.Load_Serienbrief(sb, AppParams.tempdir); sb.filename = db.get_sb_vorlage(sb.serienbriefnr, AppParams.tempdir); pnlLoad.Visible = false; update_screen(); refresh_empfaenger(sb.dsempfaenger.Tables[0]); GrpEmpfaenger.Visible = true; GrpDokumentInhalt.Visible = true; db = null; } private void update_screen() { txtbezeichnung.Text = sb.bezeichnung; cbboxpostzustellung.SelectedValue = sb.postzustellung; cbboxunterschriftlinks.SelectedValue = sb.unterschriftlinks; cbboxunterschriftrechts.SelectedValue = sb.unterschriftrechts; cbboxverantwortlich.SelectedValue = sb.verantwortlich; update_zahlen(); GrpDokumentInhalt.Enabled = true; } private void btnsbloadcancel_Click(object sender, EventArgs e) { pnlLoad.Visible = false; GrpEmpfaenger.Visible = true; GrpDokumentInhalt.Visible = true; } private void sfdatagridsbload_CellClick(object sender, Syncfusion.WinForms.DataGrid.Events.CellClickEventArgs e) { var selectedItem = e.DataRow; var dataRow = (e.DataRow.RowData as DataRowView).Row; selectedsbnr = Convert.ToInt32(dataRow["serienbriefnr"].ToString()); } private void ribbonButton1_Click(object sender, EventArgs e) { SerienbriefBearbeitung sbedit = new SerienbriefBearbeitung(this.sb); sbedit.Show(); } private void ribbonbuttonaddpartner_Click(object sender, EventArgs e) { Partnersuche ps = new Partnersuche(); ps.ShowDialog(); if (ps.DialogResult == DialogResult.OK) { DB db = new DB(AppParams.connectionstring); db.Get_Tabledata("Select bkpar00 from partner where nrpar00=" + ps.partnernr.ToString(), false, true); if (db.dsdaten.Tables[0].Rows.Count > 0) { System.Data.DataRow dr = sb.dsempfaenger.Tables[0].NewRow(); for (int i = 1; i < sb.dsempfaenger.Tables[0].Columns.Count; i++) { dr[i] = ""; } dr["partnernr"] = Convert.ToInt32(ps.partnernr.ToString()); dr["kurzbezeichnung"] = db.dsdaten.Tables[0].Rows[0][0].ToString(); dr["STATUS"] = 0; dr["FEHLERCODE"] = 0; sb.dsempfaenger.Tables[0].Rows.Add(dr); refresh_empfaenger(sb.dsempfaenger.Tables[0]); } db = null; } } private void partnerHinzufügenToolStripMenuItem_Click(object sender, EventArgs e) { ribbonbuttonaddpartner_Click(sender, e); } private void partnerLöschenToolStripMenuItem_Click(object sender, EventArgs e) { sfDataGridEmpfaenger.AllowDeleting = true; sfDataGridEmpfaenger.DeleteSelectedRecords(); sfDataGridEmpfaenger.AllowDeleting = false; refresh_empfaenger(sb.dsempfaenger.Tables[0]); return; } private void sfdatagridsbload_DoubleClick(object sender, EventArgs e) { if (sfdatagridsbload.RowCount == 0) return; bntsbloadok_Click(sender, e); } private void sfdatagridsbload_CellDoubleClick(object sender, Syncfusion.WinForms.DataGrid.Events.CellClickEventArgs e) { bntsbloadok_Click(sender, e); } private void Partnerliste_Pruefen() { DB db = new DB(AppParams.connectionstring); db.create_sb_check_table(AppParams.CurrentMitarbieter); db.save_sb_checkdata(AppParams.CurrentMitarbieter, sb); System.Data.DataTable dt = new System.Data.DataTable(); dt = db.Check_sb_Data(AppParams.CurrentMitarbieter, sb); string msg = ""; bool bldossier = false; System.Data.DataRow[] dr; for (int i = 0, loopTo = dt.Rows.Count - 1; i <= loopTo; i++) { dr = sb.dsempfaenger.Tables[0].Select("Partnernr='" + dt.Rows[i][0].ToString() + "'"); if (dr.Length == 0) { dr = sb.dsempfaenger.Tables[0].Select("Partnernr=''"); } foreach (var dr1 in dr) { dr1["Status"] = dt.Rows[i]["status"]; try { if (Convert.ToInt32(dt.Rows[i]["Fehlercode"]) > 0) { dr1["Fehlercode"] = dt.Rows[i]["Fehlercode"]; } if (Convert.ToInt32(dt.Rows[i]["Fehlercode"]) >= 10) { if (Convert.ToInt32(dt.Rows[i]["Fehlercode"]) == 11) { // MyMsg.show_standardmessage(920000, MsgBoxStyle.Exclamation) msg = "Die Serienbriefvorlage ist für Personen-Dokumente. Es sind jedoch BP's in der Partnerliste. Der Serienbrief kann nicht generiert werden."; } else { msg = "Die Serienbriefvorlage ist für BP-Dokumente. Es sind jedoch Personen-Nummern in der Partnerliste. Der Serienbrief kann nicht generiert weden."; } } } catch { } } if (Convert.ToInt32(dt.Rows[i][4]) == 1) { bldossier = true; }; } if (sb.dsempfaenger.Tables[0].Columns.Count > 20) { check_zwingende_felder(); } refresh_empfaenger(sb.dsempfaenger.Tables[0]); if (msg !="") { MessageBox.Show(msg,"Serienbrief",MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void check_zwingende_felder() { for (int i = 20; i < sb.dsempfaenger.Tables[0].Columns.Count; i++) { if (Convert.ToInt32(sb.dsempfaenger.Tables[1].Rows[0][sb.dsempfaenger.Tables[0].Columns[i].ColumnName]) == 1) { System.Data.DataRow[] dr = sb.dsempfaenger.Tables[0].Select("[" + sb.dsempfaenger.Tables[0].Columns[i].ColumnName + "] <>''"); foreach (System.Data.DataRow dr2 in dr) { if (Convert.ToInt32(dr2["Status"]) == 0) { dr2["Status"] = 1; } } dr = sb.dsempfaenger.Tables[0].Select("[" + sb.dsempfaenger.Tables[0].Columns[i].ColumnName + "] =''"); foreach (System.Data.DataRow dr2 in dr) { if (Convert.ToInt32(dr2["Status"]) == 0) { dr2["Status"] = -1; dr2["Fehlercode"] = 2; } } } } } private void ribbonButton2_Click(object sender, EventArgs e) { Partnerliste_Pruefen(); treeViewAdv1_AfterSelect(sender, e); } } }