using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Net; using System.Net.Http; using System.Net.Mail; using System.Text; using System.Threading.Tasks; using Database; using Model; using Newtonsoft.Json; using static System.Net.WebRequestMethods; namespace zz_api_doccreate_demo { internal class Program { static string connectionstring = @"data source=shu01\shu00;initial catalog=edoka_dms;packet size=4096;user id=sa;password=*shu29"; static string unterschriftenpath = @"E:\Software-Projekte\OnDoc\Unterschriften\"; static void Main(string[] args) { bool hasattachment = false; string result = System.IO.File.ReadAllText(@"E:\Software-Projekte\OnDoc\APIJson\PAKET.json"); DokumentCreate paket = new DokumentCreate(); paket = JsonConvert.DeserializeObject(result); string CheckResult = ""; CheckResult = CreatePaket_Verify(ref paket); if (CheckResult != "") { Console.WriteLine(CheckResult); } foreach (APIDokument dokument in paket.Dokumente) { if (dokument.PDFDoc != "" && dokument.PDFDoc != null) { string gid = "ATT" + RandomString(19); dokument.DokumentID = gid; hasattachment = true; } else { dokument.DokumentID = create_paketdoc(dokument, paket, ""); } } } static string CreatePaket_Verify(ref DokumentCreate paket) { try { int i = 0; foreach (APIDokument dokument in paket.Dokumente) { i = i + 1; if (dokument.PDFDoc != null && dokument.PDFDoc.Length > 0) { if (i == 1) { return "Ein Anhang (PDF-Dokument) kann nicht als erstes Dokument bereit gestellt werden."; } if (!(ParamCheck("partnernr", dokument.Partnernr.ToString()))) { return "Partnernr " + dokument.Partnernr + " ist ungültig"; } if (dokument.VorlagenTypID != "0") { return "Vorlagentyp muss bei PDF-Dokumenten '0' sein"; } break; } if (!(ParamCheck("partnernr", dokument.Partnernr.ToString()))) { return "Partnernr " + dokument.Partnernr + " ist ungültig"; } if (dokument.VorlagenTypID == "" && dokument.PDFDoc == "") { return "Vorlagentyp emptry und PDFDoc empty"; } if (!(ParamCheck("dokumenttyp", dokument.VorlagenTypID))) { return "Vorlagentyp " + dokument.VorlagenTypID + " ist ungültig"; } if (!(ParamCheck("tgnr", dokument.TGNrErsteller))) { return "TGNr-Ersteller " + dokument.TGNrErsteller + " ist ungültig"; } if (!(ParamCheck("tgnr", dokument.TGNrVerantwortlich))) { return "TGNr-Verantwortlich " + dokument.TGNrVerantwortlich + " ist ungültig"; } if (!(ParamCheck("tgnr", dokument.TGNrUnterschriftLinks))) { return "TGNr-Unterschriftlinks " + dokument.TGNrUnterschriftLinks + " ist ungültig"; } if (!(ParamCheck("tgnr", dokument.TGNrUnterschriftRechts))) { return "TGNr-Unterschriftrechts " + dokument.TGNrUnterschriftRechts + " ist ungültig"; } if (!(ParamCheck("yesno", dokument.FaksimileUnterschrift))) { return "Parameter Faxsimile " + dokument.FaksimileUnterschrift + " ist ungültig"; } if (!(ParamCheck("yesno", dokument.OhneUnterschrift))) { return "Parameter Form ohne Unterschrift " + dokument.OhneUnterschrift + " ist ungültig"; } if (!(ParamCheck("yesno", dokument.PrintLogo))) { return "Parameter PrintLogo " + dokument.PrintLogo + " ist ungültig"; } if (!(ParamCheck("yesno", dokument.UnterschriftLinksGeprueft))) { return "Parameter UnterschriftLinksGeprueft" + dokument.UnterschriftLinksGeprueft + " ist ungültig"; } if (!(ParamCheck("yesno", dokument.UnterschriftRechtsGeprueft))) { return "Parameter UnterschriftRechtsGeprueft" + dokument.UnterschriftRechtsGeprueft + " ist ungültig"; } if (dokument.TGNrUnterschriftLinks.ToString() == "") { dokument.TGNrUnterschriftLinks = "-1"; } if (dokument.TGNrUnterschriftRechts.ToString() == "") { dokument.TGNrUnterschriftRechts = "-1"; } if (dokument.FaksimileUnterschrift.ToUpper() == "YES") { if (dokument.TGNrUnterschriftLinks.ToString() == "-1") { return "Faksimile Unterschrift benötigt mit den Parameter TGUnterschriftLinks"; } if (dokument.TGNrUnterschriftLinks.ToString() != "") { //string path = System.Configuration.ConfigurationManager.AppSettings["UnterschriftPath"].ToString() + dokument.TGNrUnterschriftLinks.ToString() + ".jpg"; string path = unterschriftenpath + dokument.TGNrUnterschriftLinks.ToString() + ".jpg"; if (!System.IO.File.Exists(path)) { return "Image Unterschrift links " + dokument.TGNrUnterschriftLinks + " ist nicht vorhanden"; } } if (dokument.TGNrUnterschriftRechts.ToString() != "-1") { //string path = System.Configuration.ConfigurationManager.AppSettings["UnterschriftPath"].ToString() + dokument.TGNrUnterschriftLinks.ToString() + ".jpg"; string path = unterschriftenpath + dokument.TGNrUnterschriftLinks.ToString() + ".jpg"; if (!System.IO.File.Exists(path)) { return "Image Unterschrift rechts " + dokument.TGNrUnterschriftRechts + " ist nicht vorhanden"; } } } if (paket.Versandstrasse == "Yes") { if (dokument.TGNrUnterschriftLinks != "" && dokument.UnterschriftLinksGeprueft != "Yes") { return "Versandstrasse mit ungeprüfter, linker Unterschrift ist nicht möglich"; } if (dokument.TGNrUnterschriftRechts != "" && dokument.UnterschriftRechtsGeprueft != "Yes") { return "Versandstrasse mit ungeprüfter, rechter Unterschrift ist nicht möglich"; } if (ParamCheck("doktypversandstrasse", dokument.VorlagenTypID) == false) { return "Vorlagentyp " + dokument.VorlagenTypID + " ist nicht für die Versandstrasse konfiguriert"; } if (i == 1) { if (ParamCheck("firstdoc", dokument.VorlagenTypID) == false) { return "Vorlagentyp " + dokument.VorlagenTypID + " kann nicht als erstes Dokument im Paket sein"; } } //if (dokument.TGNrUnterschriftLinks.ToLower() != "-1" && dokument.TGNrUnterschriftRechts.ToString() != "-1") { return "Versandstrasse mit zwei Unterschriften kann nicht automatisch angesteuert werden"; } } } if (!(ParamCheck("yesno", paket.Versandstrasse))) { return "Parameter Versandstrasse " + paket.Versandstrasse + " ist ungültig"; } if (!(ParamCheck("yesno", paket.Versand_Direkt))) { return "Parameter Versand Direkt " + paket.Versand_Direkt + " ist ungültig"; } if (!(ParamCheck("yesno", paket.Result_OnDoc))) { return "Parameter Result_OnDoc " + paket.Result_OnDoc + " ist ungültig"; } if (!(ParamCheck("yesno", paket.Result_Sender))) { return "Parameter Result_Sender " + paket.Result_Sender + " ist ungültig"; } if (!(ParamCheck("filetype", paket.Result_FileType))) { return "Parameter Result_Filetype " + paket.Result_FileType + " ist ungültig"; } if (!(ParamCheck("yesno", paket.ConfirmationMail))) { return "Parameter ConfirmationMail " + paket.ConfirmationMail + " ist ungültig"; } if (!(ParamCheck("yesno", paket.ConfirmationMail))) { return "Parameter ConfirmationMail " + paket.ConfirmationMail + " ist ungültig"; } if (!(ParamCheck("versandoption", paket.Versand_Option))) { return "Versandoption " + paket.Versand_Option + " ist ungültig"; } if (paket.ConfirmationMail.ToUpper() == "YES" && paket.ConfirmationMailAddress.ToString() != "") { return "E-Mailadresse für Confirmation fehlt"; } if (paket.Versandstrasse == "Yes") { if (paket.Versand_Option == "") { return "Versandoption fehlt (A_Post, B1_Post, B2_Post"; } } return ""; } catch (Exception ex) { return ex.Message; } } static bool ParamCheck(string ParamType, string ParamValue) { DB db = new DB(connectionstring); try { switch (ParamType) { case "partnernr": db.Get_Tabledata("Select count(*) from partner where nrpar00=" + ParamValue, false, true); if (db.dsdaten.Tables[0].Rows[0][0].ToString() == "0") { return false; } break; case "dokumenttyp": db.Get_Tabledata("Select count(*) from dokumenttyp where dokumenttypnr=" + ParamValue, false, true); if (db.dsdaten.Tables[0].Rows[0][0].ToString() == "0") { return false; } break; case "partnerdokumenttyp": //Prüfung Person/Doktyp BP/Doktyp break; case "tgcreator": case "tgresp": case "tgul": case "tgur": case "tgnr": if (ParamType == "tgcreator" && ParamValue == "") { return false; } else { if (ParamValue == "") { return true; } }; db.Get_Tabledata("Select count(*) from mitarbeiter where tgnummer='" + ParamValue + "'", false, true); if (db.dsdaten.Tables[0].Rows[0][0].ToString() == "0") { return false; } break; case "yesno": if (ParamValue != "Yes" && ParamValue != "No" && ParamValue != "") { return false; }; break; case "filetype": if (ParamValue != "WORD" && ParamValue != "PDF") { return false; } break; case "versandoption": if (ParamValue != "A_POST" && ParamValue != "B1_POST" && ParamValue != "B2_POST" && ParamValue != "") { return false; } break; case "doktypversandstrasse": db.Get_Tabledata("Select versandstrasse_moeglich, versandstrasse_firstdoc from dokumenttyp where dokumenttypnr=" + ParamValue, false, true); if (Convert.ToInt32(db.dsdaten.Tables[0].Rows[0][0]) == 0) { return false; } break; case "firstdoc": db.Get_Tabledata("Select versandstrasse_moeglich, versandstrasse_firstdoc from dokumenttyp where dokumenttypnr=" + ParamValue, false, true); if (Convert.ToInt32(db.dsdaten.Tables[0].Rows[0][1]) == 0) { return false; } break; default: return false; break; } return true; } catch { return false; } finally { db = null; } } static string create_paketdoc(APIDokument dokument, DokumentCreate paket, string key) { //string OwnHost = System.Configuration.ConfigurationManager.AppSettings["OwnHost"].ToString(); string dokumentid = ""; clsDocData dokdata = new clsDocData(); Database.DB db = new DB(connectionstring); db.Get_Tabledata("Select * from dokumenttyp where dokumenttypnr=" + dokument.VorlagenTypID, false, true); System.Data.DataRow dr = db.dsdaten.Tables[0].Rows[0]; dokdata.Barcode = Convert.ToBoolean(dr["Vertrag"]) == true; db.Get_Tabledata("Select beschreibung from physischesarchiv where physischesarchivnr = " + dr["physisches_archiv"].ToString(), false, true); dokdata.barcode_zusatz = db.dsdaten.Tables[0].Rows[0][0].ToString(); if (dokdata.barcode_zusatz != "") { dokdata.barcode_zusatz = " " + dokdata.barcode_zusatz; } db.Get_Tabledata("Select office_vorlagenr,kopfzeile_generieren, bcpt,bcpl, bcw, bch, bchorizontal, barcodetype, datamatrixcontent from office_vorlage where office_vorlagenr=" + dr["office_vorlagenr"].ToString(), false, true); dokdata.VorlageNr = Convert.ToInt32(dr["office_vorlagenr"]).ToString(); ; try { dokdata.Kopfzeile_generieren = false; if (Convert.ToBoolean(db.dsdaten.Tables[0].Rows[0][1]) == true) { dokdata.Kopfzeile_generieren = true; } } catch { } if (dokdata.Barcode) { dokdata.barcode_left = Convert.ToInt32(db.dsdaten.Tables[0].Rows[0]["bcpl"]); dokdata.barcode_top = Convert.ToInt32(db.dsdaten.Tables[0].Rows[0]["bcpt"]); dokdata.barcode_width = Convert.ToInt32(db.dsdaten.Tables[0].Rows[0]["bcw"]); dokdata.barcode_height = Convert.ToInt32(db.dsdaten.Tables[0].Rows[0]["bch"]); dokdata.barcode_horizontal = Convert.ToInt32(db.dsdaten.Tables[0].Rows[0]["bchorizontal"]); dokdata.barcode_type = db.dsdaten.Tables[0].Rows[0]["BarcodeType"].ToString(); dokdata.barcode_content = db.dsdaten.Tables[0].Rows[0]["DatamatrixContent"].ToString(); string sql = ""; sql = "select bcpt, bcpl, bcw, bch, bchorizontal from OnDocBarcodeMpping "; sql = sql + "where orig_bcpt = " + dokdata.barcode_top.ToString() + " and orig_bcpl=" + dokdata.barcode_left.ToString() + " "; sql = sql + "and orig_bcw=" + dokdata.barcode_width.ToString() + " and orig_bch=" + dokdata.barcode_height.ToString(); db.Get_Tabledata(sql, false, true); if (db.dsdaten.Tables[0].Rows.Count > 0) { dokdata.barcode_left = Convert.ToInt32(db.dsdaten.Tables[0].Rows[0]["bcpl"]); dokdata.barcode_top = Convert.ToInt32(db.dsdaten.Tables[0].Rows[0]["bcpt"]); dokdata.barcode_width = Convert.ToInt32(db.dsdaten.Tables[0].Rows[0]["bcw"]); dokdata.barcode_height = Convert.ToInt32(db.dsdaten.Tables[0].Rows[0]["bch"]); } if (dokdata.barcode_type == "1") { DB dB = new DB(connectionstring); dB.clear_parameter(); dB.add_parameter("@dokumentid", dokumentid); dB.add_parameter("@DokumentidBR", ""); dB.add_parameter("@BARCODEFONTNAME", ""); dB.add_parameter("@BARCODEFONTSIZE", ""); dB.add_parameter("@BarcodeKantenlaenge", ""); dB.Get_Tabledata("sp_get_OnDoc_barcodetype_and_value", true, false); dokdata.barcode_content = dB.dsdaten.Tables[0].Rows[0][1].ToString(); dokdata.barcode_formatn = dB.dsdaten.Tables[0].Rows[0][3].ToString(); dokdata.barcode_text = dB.dsdaten.Tables[0].Rows[0][4].ToString(); dokdata.barcode_kantenlaenge = dB.dsdaten.Tables[0].Rows[0][5].ToString(); dokdata.Zusatz_Font = dB.dsdaten.Tables[0].Rows[0][6].ToString(); dokdata.Zusatz_FontSize = Convert.ToInt32(dB.dsdaten.Tables[0].Rows[0][7]); dokdata.barcode_width = Convert.ToInt32(dB.dsdaten.Tables[0].Rows[0][8]); dokdata.barcode_height = Convert.ToInt32(dB.dsdaten.Tables[0].Rows[0][9]); //dokdata.barcode_type= dB.dsdaten.Tables[0].Rows[0][3].ToString(); sql = "select bcpt, bcpl, bcw, bch, bchorizontal from OnDocBarcodeMpping "; sql = sql + "where orig_bcpt = " + dokdata.barcode_top.ToString() + " and orig_bcpl=" + dokdata.barcode_left.ToString() + " "; sql = sql + "and orig_bcw=" + dokdata.barcode_width.ToString() + " and orig_bch=" + dokdata.barcode_height.ToString(); dB.Get_Tabledata(sql, false, true); if (dB.dsdaten.Tables[0].Rows.Count > 0) { //Logging.Logging.Debug("Barcode-Übersteuerung" + dokdata.DokumenttypNr.ToString(), "Dokumenterstellung", ""); dokdata.barcode_left = Convert.ToInt32(dB.dsdaten.Tables[0].Rows[0]["bcpl"]); dokdata.barcode_top = Convert.ToInt32(dB.dsdaten.Tables[0].Rows[0]["bcpt"]); dokdata.barcode_width = Convert.ToInt32(dB.dsdaten.Tables[0].Rows[0]["bcw"]); dokdata.barcode_height = Convert.ToInt32(dB.dsdaten.Tables[0].Rows[0]["bch"]); } } db.Get_Tabledata("Select * from ondoc_appparams", false, true); dokdata.barcode_font = db.dsdaten.Tables[0].Rows[0]["barcodefont"].ToString(); dokdata.barcode_fontsize = Convert.ToInt32(db.dsdaten.Tables[0].Rows[0]["barcodefontsize"].ToString()); dokdata.Zusatz_Font = db.dsdaten.Tables[0].Rows[0]["Zusatzfont"].ToString(); dokdata.Zusatz_FontSize = Convert.ToInt32(db.dsdaten.Tables[0].Rows[0]["ZusatzfontSize"].ToString()); dokdata.barcode_textposition = db.dsdaten.Tables[0].Rows[0]["barcodetextposition"].ToString(); ; } Model.clsdocgendata docgendata = new Model.clsdocgendata(); DataTable dokwertlist = new DataTable(); dokwertlist = db.Get_DokumentWertList("", Convert.ToInt32(dokument.VorlagenTypID), 1); docgendata.dokumentwerte = dokwertlist; docgendata.partnernr = dokument.Partnernr; docgendata.inhaberadresse = ""; docgendata.zustelladresse = ""; docgendata.dokumenttypnr = dokument.VorlagenTypID; docgendata.unterschriftLinks = db.Get_Mitarbeiternr(dokument.TGNrUnterschriftLinks).ToString(); docgendata.unterschriftRehts = db.Get_Mitarbeiternr(dokument.TGNrUnterschriftRechts).ToString(); docgendata.verantwortlich = db.Get_Mitarbeiternr(dokument.TGNrVerantwortlich).ToString(); docgendata.ersteller = db.Get_Mitarbeiternr(dokument.TGNrErsteller).ToString(); docgendata.team = db.Get_Teamnr(docgendata.ersteller).ToString(); docgendata.digitaleunterschrift = false; docgendata.frormularOhneUnterschrift = dokument.OhneUnterschrift == "Yes"; docgendata.zustaendigkube = db.Get_Mitarbeiternr(dokument.TGNrVerantwortlich).ToString(); docgendata.status = "-1"; docgendata.dokumentdatum = DateTime.Now.ToString("dd.MM.yyyy"); docgendata.dokumentdatum = dokument.Dokumentdatum; docgendata.frormularOhneUnterschrift = dokument.OhneUnterschrift == "Yes"; docgendata.bezeichnung = dokument.Bezeichnung; if (paket.Result_FileType == "WORD") { docgendata.erstellungsart = Erstellungsart.DokumentBearbeiten; } else { docgendata.erstellungsart = Erstellungsart.DokumentAlsPDF; } if (docgendata.verantwortlich == "0") { docgendata.verantwortlich = docgendata.ersteller; } dokdata.PartnerNr = docgendata.partnernr; dokdata.UseEDOKA_Values = "True"; dokdata.DokumenttypNr = docgendata.dokumenttypnr; dokdata.Unterschrift_Links = docgendata.unterschriftLinks; if (dokdata.Unterschrift_Links == "0") { dokdata.Unterschrift_Links = "-1"; } dokdata.Unterschrift_Rechts = docgendata.unterschriftRehts; if (dokdata.Unterschrift_Rechts == "0") { dokdata.Unterschrift_Rechts = "-1"; } dokdata.Verantwortlich = docgendata.verantwortlich; dokdata.Team = docgendata.team; dokdata.Zustaendig = docgendata.zustaendigkube; dokdata.Zustaendig = docgendata.zustaendigkube; dokdata.Status = docgendata.status; dokdata.Ersteller = docgendata.ersteller; dokdata.DokumentDatum = docgendata.dokumentdatum; dokdata.Termin = "01.01.1900"; dokdata.Bezeichnung = docgendata.bezeichnung; dokdata.dokumentwerte = docgendata.dokumentwerte; //Unterschriftenprüfung dokdata.Form_ohne_Unterschrift = docgendata.frormularOhneUnterschrift.ToString(); dokdata.approval1 = 0; dokdata.approval2 = 0; dokdata.approved = 0; if (dokdata.Form_ohne_Unterschrift == "True") { dokdata.Unterschrift_Links = "-1"; dokdata.Unterschrift_Rechts = "-1"; } if (dokument.FaksimileUnterschrift == "Yes") { dokdata.As_Faksimile = "True"; dokdata.sign = true; docgendata.digitaleunterschrift = true; if (dokdata.Unterschrift_Links != "-1") { dokdata.approval1 = 1; } if (dokdata.Unterschrift_Rechts != "-1") { dokdata.approval2 = 1; } dokdata.approved = 1; docgendata.erstellungsart = Erstellungsart.DokumentBearbeiten; //if (dokdata.Unterschrift_Links != "-1" && dokdata.Unterschrift_Rechts != "-1") //{ // if (dokdata.Ersteller == dokdata.Unterschrift_Links) // { // dokdata.approved = 1; // } // else // { // dokdata.sign = false; // dokdata.toapprove = 0; // dokdata.approved = 1; // dokdata.approval1 = 1; // dokdata.approval2 = 1; // docgendata.erstellungsart = Erstellungsart.DokumentBearbeiten; // } //} //else //{ // docgendata.erstellungsart = Erstellungsart.DokumentBearbeiten; // dokdata.toapprove = 1; // dokdata.sign = true; //} } dokdata.APIValues = dokument.APIValues; dokdata.TextToReplace = dokument.TextToReplace; if (dokument.PrintLogo == "Yes") { dokdata.PrintLogo = true; } else { dokdata.PrintLogo = false; } if (docgendata.erstellungsart == Erstellungsart.DokumentAlsPDF) { dokdata.Result_as_PDF = "True"; } else { dokdata.Result_as_PDF = "False"; } if (docgendata.digitaleunterschrift == true) { dokdata.As_Faksimile = "True"; } else { dokdata.As_Faksimile = "False"; } dokumentid = db.Create_EDOKA_Doc(dokdata, false, ""); dokdata.Dokumentid = dokumentid; //DOCGEN.Generator.DocGenerator_from_EDOKA Generator = new DOCGEN.Generator.DocGenerator_from_EDOKA(this.connectionstring, OwnHost, key.ToString()); DOCGEN.Generator.DocGenerator_from_EDOKA Generator = new DOCGEN.Generator.DocGenerator_from_EDOKA(connectionstring, "", key.ToString()); clsdok dok = new clsdok("", "", "", ""); dok = Generator.Generate_Doc_EDOKA(dokumentid, ref dokdata, false, 0, false, false); db.Save_To_DB(dokumentid, "", dok.dokument); dokdata = null; docgendata = null; db = null; Generator = null; dok = null; return dokumentid; } static readonly Random _random = new Random(); static string RandomString(int size, bool lowerCase = false) { var builder = new StringBuilder(size); // Unicode/ASCII Letters are divided into two blocks // (Letters 65–90 / 97–122): // The first group containing the uppercase letters and // the second group containing the lowercase. // char is a single Unicode character char offset = lowerCase ? 'a' : 'A'; const int lettersOffset = 26; // A...Z or a..z: length=26 for (var i = 0; i < size; i++) { var @char = (char)_random.Next(offset, offset + lettersOffset); builder.Append(@char); } return lowerCase ? builder.ToString().ToLower() : builder.ToString(); } } }