Files
OnDoc/zz_api_doccreate_demo/Program.cs
Stefan Hutter 6ac2108d40 update 20251210
2025-12-10 17:42:12 +01:00

427 lines
25 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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<DokumentCreate>(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 6590 / 97122):
// 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();
}
}
}