From feaec7a290fc77b66ae70ad692cba266978c98d5 Mon Sep 17 00:00:00 2001 From: Andreas Luxbauer Date: Wed, 20 Aug 2025 13:48:34 +0200 Subject: [PATCH 1/2] DHF Artikel API; AuditFlow --- SDL/My Project/AssemblyInfo.vb | 4 +- SDL/zoll/usrCntlZollArtikel.vb | 7 +- .../frmAuditFlow_Pruefungen.Designer.vb | 493 +++++++++ .../AuditFlow/frmAuditFlow_Pruefungen.resx | 980 ++++++++++++++++++ .../AuditFlow/frmAuditFlow_Pruefungen.vb | 131 +++ .../Classes/cKundenMatchResult.vb | 241 +++++ VERAG_PROG_ALLGEMEIN/Classes/cMitarbeiter.vb | 12 + .../Schnittstellen/DHF/cDHF_Artikel.vb | 93 +- .../VERAG_PROG_ALLGEMEIN.vbproj | 9 + 9 files changed, 1946 insertions(+), 24 deletions(-) create mode 100644 VERAG_PROG_ALLGEMEIN/AuditFlow/frmAuditFlow_Pruefungen.Designer.vb create mode 100644 VERAG_PROG_ALLGEMEIN/AuditFlow/frmAuditFlow_Pruefungen.resx create mode 100644 VERAG_PROG_ALLGEMEIN/AuditFlow/frmAuditFlow_Pruefungen.vb create mode 100644 VERAG_PROG_ALLGEMEIN/Classes/cKundenMatchResult.vb diff --git a/SDL/My Project/AssemblyInfo.vb b/SDL/My Project/AssemblyInfo.vb index 9d78f2c6..48d7cb39 100644 --- a/SDL/My Project/AssemblyInfo.vb +++ b/SDL/My Project/AssemblyInfo.vb @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' übernehmen, indem Sie "*" eingeben: ' - - + + diff --git a/SDL/zoll/usrCntlZollArtikel.vb b/SDL/zoll/usrCntlZollArtikel.vb index ebf5bc32..57156d24 100644 --- a/SDL/zoll/usrCntlZollArtikel.vb +++ b/SDL/zoll/usrCntlZollArtikel.vb @@ -867,11 +867,10 @@ Public Class usrCntlZollArtikel MsgBox("Kundennummer ungültig!") : Exit Sub End If + Dim LizenzNr = "S01122" - If DHF_Artikel.Delete_KD(kdNrDHF) Then - - Dim LizenzNr = "S01122" - 'zollArt_id, KundenNr, zollArt_Status, zollArt_Artikelnummer , zollArt_Warencodenummer, zollArt_Kennzeichen_Gueltig, zollArt_Kurzbezeichnung, Erfassungsdatum, Aenderungsdatum, Sachbearbeiter,zollArt_Warenbeschreibung + If DHF_Artikel.Delete_KD(kdNrDHF, LizenzNr) AndAlso DHF_Artikel.Delete_KDLiveDate(kdNrDHF, LizenzNr) Then + Console.WriteLine("Alte Einträge erfolgreich gelöscht. ") Dim ZOLL_ART_LIST = cZollArtikel.GetListByKundenNr(kdnr) diff --git a/VERAG_PROG_ALLGEMEIN/AuditFlow/frmAuditFlow_Pruefungen.Designer.vb b/VERAG_PROG_ALLGEMEIN/AuditFlow/frmAuditFlow_Pruefungen.Designer.vb new file mode 100644 index 00000000..ed49be30 --- /dev/null +++ b/VERAG_PROG_ALLGEMEIN/AuditFlow/frmAuditFlow_Pruefungen.Designer.vb @@ -0,0 +1,493 @@ + +Partial Class frmAuditFlow_Pruefungen + Inherits System.Windows.Forms.Form + + 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen. + + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Wird vom Windows Form-Designer benötigt. + Private components As System.ComponentModel.IContainer + + 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich. + 'Das Bearbeiten ist mit dem Windows Form-Designer möglich. + 'Das Bearbeiten mit dem Code-Editor ist nicht möglich. + + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmAuditFlow_Pruefungen)) + Me.pnlTop = New System.Windows.Forms.Panel() + Me.Label4 = New System.Windows.Forms.Label() + Me.cboKategorie = New VERAG_PROG_ALLGEMEIN.MyComboBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.Label7 = New System.Windows.Forms.Label() + Me.cboStandort = New VERAG_PROG_ALLGEMEIN.MyComboBox() + Me.cboFirma = New VERAG_PROG_ALLGEMEIN.MyComboBox() + Me.cboNL = New VERAG_PROG_ALLGEMEIN.MyComboBox() + Me.Label5 = New System.Windows.Forms.Label() + Me.Label6 = New System.Windows.Forms.Label() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label3 = New System.Windows.Forms.Label() + Me.txtBezeichnung = New VERAG_PROG_ALLGEMEIN.MyTextBox() + Me.txtKennung = New VERAG_PROG_ALLGEMEIN.MyTextBox() + Me.cboMA = New VERAG_PROG_ALLGEMEIN.MyComboBox() + Me.Label8 = New System.Windows.Forms.Label() + Me.datVon = New VERAG_PROG_ALLGEMEIN.MyTextBox() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.Label15 = New System.Windows.Forms.Label() + Me.Panel2 = New System.Windows.Forms.Panel() + Me.Label9 = New System.Windows.Forms.Label() + Me.RichTextBox1 = New System.Windows.Forms.RichTextBox() + Me.CheckBox2 = New System.Windows.Forms.CheckBox() + Me.Label10 = New System.Windows.Forms.Label() + Me.Button2 = New System.Windows.Forms.Button() + Me.UsrcntlPDFScanList1 = New VERAG_PROG_ALLGEMEIN.usrcntlPDFScanList() + Me.Label11 = New System.Windows.Forms.Label() + Me.pnlTop.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.Panel2.SuspendLayout() + Me.SuspendLayout() + ' + 'pnlTop + ' + Me.pnlTop.BackColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(54, Byte), Integer), CType(CType(128, Byte), Integer)) + Me.pnlTop.Controls.Add(Me.Label4) + Me.pnlTop.Dock = System.Windows.Forms.DockStyle.Top + Me.pnlTop.Location = New System.Drawing.Point(0, 0) + Me.pnlTop.Name = "pnlTop" + Me.pnlTop.Size = New System.Drawing.Size(580, 48) + Me.pnlTop.TabIndex = 10 + ' + 'Label4 + ' + Me.Label4.AutoSize = True + Me.Label4.Font = New System.Drawing.Font("Microsoft Sans Serif", 16.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label4.ForeColor = System.Drawing.Color.White + Me.Label4.Location = New System.Drawing.Point(10, 13) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(207, 26) + Me.Label4.TabIndex = 0 + Me.Label4.Text = "AuditFlow Prüfung" + ' + 'cboKategorie + ' + Me.cboKategorie._allowedValuesFreiText = Nothing + Me.cboKategorie._allowFreiText = False + Me.cboKategorie._value = "" + Me.cboKategorie.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend + Me.cboKategorie.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems + Me.cboKategorie.Enabled = False + Me.cboKategorie.Font = New System.Drawing.Font("Microsoft Sans Serif", 10.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cboKategorie.FormattingEnabled = True + Me.cboKategorie.Location = New System.Drawing.Point(403, 125) + Me.cboKategorie.Name = "cboKategorie" + Me.cboKategorie.Size = New System.Drawing.Size(143, 24) + Me.cboKategorie.TabIndex = 38 + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Enabled = False + Me.Label1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label1.Location = New System.Drawing.Point(315, 130) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(82, 13) + Me.Label1.TabIndex = 37 + Me.Label1.Text = "KATEGORIE:" + ' + 'Label7 + ' + Me.Label7.AutoSize = True + Me.Label7.Enabled = False + Me.Label7.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label7.Location = New System.Drawing.Point(13, 130) + Me.Label7.Name = "Label7" + Me.Label7.Size = New System.Drawing.Size(50, 13) + Me.Label7.TabIndex = 36 + Me.Label7.Text = "Standort:" + ' + 'cboStandort + ' + Me.cboStandort._allowedValuesFreiText = Nothing + Me.cboStandort._allowFreiText = False + Me.cboStandort._value = "" + Me.cboStandort.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend + Me.cboStandort.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems + Me.cboStandort.Enabled = False + Me.cboStandort.Font = New System.Drawing.Font("Microsoft Sans Serif", 10.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cboStandort.FormattingEnabled = True + Me.cboStandort.Location = New System.Drawing.Point(123, 125) + Me.cboStandort.Name = "cboStandort" + Me.cboStandort.Size = New System.Drawing.Size(143, 24) + Me.cboStandort.TabIndex = 35 + ' + 'cboFirma + ' + Me.cboFirma._allowedValuesFreiText = Nothing + Me.cboFirma._allowFreiText = False + Me.cboFirma._value = "" + Me.cboFirma.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend + Me.cboFirma.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems + Me.cboFirma.Enabled = False + Me.cboFirma.Font = New System.Drawing.Font("Microsoft Sans Serif", 10.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cboFirma.FormattingEnabled = True + Me.cboFirma.Location = New System.Drawing.Point(123, 68) + Me.cboFirma.Name = "cboFirma" + Me.cboFirma.Size = New System.Drawing.Size(143, 24) + Me.cboFirma.TabIndex = 34 + ' + 'cboNL + ' + Me.cboNL._allowedValuesFreiText = Nothing + Me.cboNL._allowFreiText = False + Me.cboNL._value = "" + Me.cboNL.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend + Me.cboNL.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems + Me.cboNL.Enabled = False + Me.cboNL.Font = New System.Drawing.Font("Microsoft Sans Serif", 10.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cboNL.FormattingEnabled = True + Me.cboNL.Location = New System.Drawing.Point(123, 94) + Me.cboNL.Name = "cboNL" + Me.cboNL.Size = New System.Drawing.Size(143, 24) + Me.cboNL.TabIndex = 33 + ' + 'Label5 + ' + Me.Label5.AutoSize = True + Me.Label5.Enabled = False + Me.Label5.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label5.Location = New System.Drawing.Point(13, 73) + Me.Label5.Name = "Label5" + Me.Label5.Size = New System.Drawing.Size(49, 13) + Me.Label5.TabIndex = 31 + Me.Label5.Text = "FIRMA:" + ' + 'Label6 + ' + Me.Label6.AutoSize = True + Me.Label6.Enabled = False + Me.Label6.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label6.Location = New System.Drawing.Point(13, 99) + Me.Label6.Name = "Label6" + Me.Label6.Size = New System.Drawing.Size(77, 13) + Me.Label6.TabIndex = 32 + Me.Label6.Text = "Niederlassung:" + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Enabled = False + Me.Label2.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(14, 205) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(84, 13) + Me.Label2.TabIndex = 39 + Me.Label2.Text = "Bezeichnung:" + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Enabled = False + Me.Label3.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!) + Me.Label3.Location = New System.Drawing.Point(14, 231) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(90, 26) + Me.Label3.TabIndex = 40 + Me.Label3.Text = "Kennung:" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "(zB Kennzeichen)" + ' + 'txtBezeichnung + ' + Me.txtBezeichnung._DateTimeOnly = False + Me.txtBezeichnung._numbersOnly = False + Me.txtBezeichnung._numbersOnlyKommastellen = "" + Me.txtBezeichnung._numbersOnlyTrennzeichen = True + Me.txtBezeichnung._Prozent = False + Me.txtBezeichnung._ShortDateNew = False + Me.txtBezeichnung._ShortDateOnly = False + Me.txtBezeichnung._TimeOnly = False + Me.txtBezeichnung._TimeOnly_Seconds = False + Me.txtBezeichnung._value = "" + Me.txtBezeichnung._Waehrung = False + Me.txtBezeichnung._WaehrungZeichen = True + Me.txtBezeichnung.Enabled = False + Me.txtBezeichnung.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!) + Me.txtBezeichnung.ForeColor = System.Drawing.Color.Black + Me.txtBezeichnung.Location = New System.Drawing.Point(123, 197) + Me.txtBezeichnung.MaxLineLength = -1 + Me.txtBezeichnung.MaxLines_Warning = "" + Me.txtBezeichnung.MaxLines_Warning_Label = Nothing + Me.txtBezeichnung.Multiline = True + Me.txtBezeichnung.Name = "txtBezeichnung" + Me.txtBezeichnung.Size = New System.Drawing.Size(436, 28) + Me.txtBezeichnung.TabIndex = 43 + ' + 'txtKennung + ' + Me.txtKennung._DateTimeOnly = False + Me.txtKennung._numbersOnly = False + Me.txtKennung._numbersOnlyKommastellen = "" + Me.txtKennung._numbersOnlyTrennzeichen = True + Me.txtKennung._Prozent = False + Me.txtKennung._ShortDateNew = False + Me.txtKennung._ShortDateOnly = False + Me.txtKennung._TimeOnly = False + Me.txtKennung._TimeOnly_Seconds = False + Me.txtKennung._value = "" + Me.txtKennung._Waehrung = False + Me.txtKennung._WaehrungZeichen = True + Me.txtKennung.Enabled = False + Me.txtKennung.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!) + Me.txtKennung.ForeColor = System.Drawing.Color.Black + Me.txtKennung.Location = New System.Drawing.Point(123, 231) + Me.txtKennung.MaxLineLength = -1 + Me.txtKennung.MaxLines_Warning = "" + Me.txtKennung.MaxLines_Warning_Label = Nothing + Me.txtKennung.Multiline = True + Me.txtKennung.Name = "txtKennung" + Me.txtKennung.Size = New System.Drawing.Size(436, 28) + Me.txtKennung.TabIndex = 44 + ' + 'cboMA + ' + Me.cboMA._allowedValuesFreiText = Nothing + Me.cboMA._allowFreiText = False + Me.cboMA._value = "" + Me.cboMA.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend + Me.cboMA.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems + Me.cboMA.Enabled = False + Me.cboMA.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!) + Me.cboMA.FormattingEnabled = True + Me.cboMA.Location = New System.Drawing.Point(123, 282) + Me.cboMA.Name = "cboMA" + Me.cboMA.Size = New System.Drawing.Size(436, 28) + Me.cboMA.TabIndex = 46 + ' + 'Label8 + ' + Me.Label8.AutoSize = True + Me.Label8.Enabled = False + Me.Label8.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!) + Me.Label8.Location = New System.Drawing.Point(14, 282) + Me.Label8.Name = "Label8" + Me.Label8.Size = New System.Drawing.Size(63, 26) + Me.Label8.TabIndex = 45 + Me.Label8.Text = "Zuständiger" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Mitarbeiter:" + ' + 'datVon + ' + Me.datVon._DateTimeOnly = False + Me.datVon._numbersOnly = False + Me.datVon._numbersOnlyKommastellen = "" + Me.datVon._numbersOnlyTrennzeichen = False + Me.datVon._Prozent = False + Me.datVon._ShortDateNew = True + Me.datVon._ShortDateOnly = False + Me.datVon._TimeOnly = False + Me.datVon._TimeOnly_Seconds = False + Me.datVon._value = "" + Me.datVon._Waehrung = False + Me.datVon._WaehrungZeichen = True + Me.datVon.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!) + Me.datVon.ForeColor = System.Drawing.Color.Black + Me.datVon.Location = New System.Drawing.Point(123, 6) + Me.datVon.MaxLength = 10 + Me.datVon.MaxLineLength = -1 + Me.datVon.MaxLines_Warning = "" + Me.datVon.MaxLines_Warning_Label = Nothing + Me.datVon.Name = "datVon" + Me.datVon.Size = New System.Drawing.Size(143, 26) + Me.datVon.TabIndex = 48 + ' + 'Panel1 + ' + Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke + Me.Panel1.Controls.Add(Me.Label15) + Me.Panel1.Controls.Add(Me.datVon) + Me.Panel1.Location = New System.Drawing.Point(0, 323) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(566, 83) + Me.Panel1.TabIndex = 61 + ' + 'Label15 + ' + Me.Label15.AutoSize = True + Me.Label15.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label15.Location = New System.Drawing.Point(15, 14) + Me.Label15.Name = "Label15" + Me.Label15.Size = New System.Drawing.Size(102, 13) + Me.Label15.TabIndex = 61 + Me.Label15.Text = "Fälligkeitsdatum:" + ' + 'Panel2 + ' + Me.Panel2.BackColor = System.Drawing.Color.PapayaWhip + Me.Panel2.Controls.Add(Me.Label9) + Me.Panel2.Controls.Add(Me.RichTextBox1) + Me.Panel2.Controls.Add(Me.CheckBox2) + Me.Panel2.Controls.Add(Me.Label10) + Me.Panel2.Location = New System.Drawing.Point(0, 407) + Me.Panel2.Name = "Panel2" + Me.Panel2.Size = New System.Drawing.Size(566, 266) + Me.Panel2.TabIndex = 62 + ' + 'Label9 + ' + Me.Label9.AutoSize = True + Me.Label9.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label9.Location = New System.Drawing.Point(14, 53) + Me.Label9.Name = "Label9" + Me.Label9.Size = New System.Drawing.Size(64, 13) + Me.Label9.TabIndex = 70 + Me.Label9.Text = "Bemerkung:" + ' + 'RichTextBox1 + ' + Me.RichTextBox1.Location = New System.Drawing.Point(123, 50) + Me.RichTextBox1.Name = "RichTextBox1" + Me.RichTextBox1.Size = New System.Drawing.Size(436, 197) + Me.RichTextBox1.TabIndex = 69 + Me.RichTextBox1.Text = "" + ' + 'CheckBox2 + ' + Me.CheckBox2.AutoSize = True + Me.CheckBox2.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Bold) + Me.CheckBox2.Location = New System.Drawing.Point(123, 19) + Me.CheckBox2.Name = "CheckBox2" + Me.CheckBox2.Size = New System.Drawing.Size(118, 24) + Me.CheckBox2.TabIndex = 68 + Me.CheckBox2.Text = "ERLEDIGT" + Me.CheckBox2.UseVisualStyleBackColor = True + ' + 'Label10 + ' + Me.Label10.AutoSize = True + Me.Label10.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label10.Location = New System.Drawing.Point(13, 25) + Me.Label10.Name = "Label10" + Me.Label10.Size = New System.Drawing.Size(47, 13) + Me.Label10.TabIndex = 55 + Me.Label10.Text = "Status:" + ' + 'Button2 + ' + Me.Button2.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Button2.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.Button2.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!) + Me.Button2.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.Button2.Location = New System.Drawing.Point(416, 786) + Me.Button2.Margin = New System.Windows.Forms.Padding(0) + Me.Button2.Name = "Button2" + Me.Button2.Padding = New System.Windows.Forms.Padding(0, 0, 10, 0) + Me.Button2.Size = New System.Drawing.Size(143, 45) + Me.Button2.TabIndex = 63 + Me.Button2.Text = "Speichern" + Me.Button2.UseVisualStyleBackColor = True + ' + 'UsrcntlPDFScanList1 + ' + Me.UsrcntlPDFScanList1._DATENSERVER_KATEGORIE = "DOKUMENTE" + Me.UsrcntlPDFScanList1._DATENSERVER_ORDNER = "" + Me.UsrcntlPDFScanList1._DATENSERVER_UOrdner1 = "" + Me.UsrcntlPDFScanList1._DATENSERVER_UOrdner2 = "" + Me.UsrcntlPDFScanList1._DATENSERVER_UOrdner3 = "" + Me.UsrcntlPDFScanList1._OPEN_ORIGINAL = False + Me.UsrcntlPDFScanList1._TYPE = "PDF" + Me.UsrcntlPDFScanList1.AllowDrop = True + Me.UsrcntlPDFScanList1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.UsrcntlPDFScanList1.BackColor = System.Drawing.Color.White + Me.UsrcntlPDFScanList1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.UsrcntlPDFScanList1.Cursor = System.Windows.Forms.Cursors.Default + Me.UsrcntlPDFScanList1.Location = New System.Drawing.Point(123, 686) + Me.UsrcntlPDFScanList1.Margin = New System.Windows.Forms.Padding(0) + Me.UsrcntlPDFScanList1.Name = "UsrcntlPDFScanList1" + Me.UsrcntlPDFScanList1.Size = New System.Drawing.Size(275, 145) + Me.UsrcntlPDFScanList1.TabIndex = 64 + ' + 'Label11 + ' + Me.Label11.AutoSize = True + Me.Label11.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label11.Location = New System.Drawing.Point(14, 686) + Me.Label11.Name = "Label11" + Me.Label11.Size = New System.Drawing.Size(61, 13) + Me.Label11.TabIndex = 71 + Me.Label11.Text = "Anhänge:" + ' + 'frmAuditFlow_Pruefungen + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(580, 845) + Me.Controls.Add(Me.Label11) + Me.Controls.Add(Me.UsrcntlPDFScanList1) + Me.Controls.Add(Me.Button2) + Me.Controls.Add(Me.cboMA) + Me.Controls.Add(Me.Label8) + Me.Controls.Add(Me.txtKennung) + Me.Controls.Add(Me.txtBezeichnung) + Me.Controls.Add(Me.Label3) + Me.Controls.Add(Me.Label2) + Me.Controls.Add(Me.cboKategorie) + Me.Controls.Add(Me.Label1) + Me.Controls.Add(Me.Label7) + Me.Controls.Add(Me.cboStandort) + Me.Controls.Add(Me.cboFirma) + Me.Controls.Add(Me.cboNL) + Me.Controls.Add(Me.Label5) + Me.Controls.Add(Me.Label6) + Me.Controls.Add(Me.pnlTop) + Me.Controls.Add(Me.Panel1) + Me.Controls.Add(Me.Panel2) + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.Name = "frmAuditFlow_Pruefungen" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "AuditFlow Prüfungsojekt" + Me.pnlTop.ResumeLayout(False) + Me.pnlTop.PerformLayout() + Me.Panel1.ResumeLayout(False) + Me.Panel1.PerformLayout() + Me.Panel2.ResumeLayout(False) + Me.Panel2.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + + Friend WithEvents pnlTop As Windows.Forms.Panel + Friend WithEvents cboKategorie As MyComboBox + Friend WithEvents Label1 As Windows.Forms.Label + Friend WithEvents Label7 As Windows.Forms.Label + Friend WithEvents cboStandort As MyComboBox + Friend WithEvents cboFirma As MyComboBox + Friend WithEvents cboNL As MyComboBox + Friend WithEvents Label5 As Windows.Forms.Label + Friend WithEvents Label6 As Windows.Forms.Label + Friend WithEvents Label2 As Windows.Forms.Label + Friend WithEvents Label3 As Windows.Forms.Label + Friend WithEvents txtBezeichnung As MyTextBox + Friend WithEvents txtKennung As MyTextBox + Friend WithEvents cboMA As MyComboBox + Friend WithEvents Label8 As Windows.Forms.Label + Friend WithEvents datVon As MyTextBox + Friend WithEvents Panel1 As Windows.Forms.Panel + Friend WithEvents Panel2 As Windows.Forms.Panel + Friend WithEvents Label15 As Windows.Forms.Label + Friend WithEvents Button2 As Windows.Forms.Button + Friend WithEvents Label4 As Windows.Forms.Label + Friend WithEvents Label9 As Windows.Forms.Label + Friend WithEvents RichTextBox1 As Windows.Forms.RichTextBox + Friend WithEvents CheckBox2 As Windows.Forms.CheckBox + Friend WithEvents Label10 As Windows.Forms.Label + Friend WithEvents UsrcntlPDFScanList1 As usrcntlPDFScanList + Friend WithEvents Label11 As Windows.Forms.Label +End Class diff --git a/VERAG_PROG_ALLGEMEIN/AuditFlow/frmAuditFlow_Pruefungen.resx b/VERAG_PROG_ALLGEMEIN/AuditFlow/frmAuditFlow_Pruefungen.resx new file mode 100644 index 00000000..26e17a05 --- /dev/null +++ b/VERAG_PROG_ALLGEMEIN/AuditFlow/frmAuditFlow_Pruefungen.resx @@ -0,0 +1,980 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAEAgIAAAAEAGAAoyAAAFgAAACgAAACAAAAAAAEAAAEAGAAAAAAAAMgAAMQOAADEDgAAAAAAAAAA + AACRbEd5TB+CWC59USZ8USV9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9 + USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9 + USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9 + USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9 + USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9 + USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9 + USZ9USZ9USZ9USZ8USV9USaCWC55TB+RbEd4Sx5mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB4Sx5/VClmMwBuPg5r + OglrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr + OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr + OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr + OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr + OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr + OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr + OQhrOgluPg5mMwB/VCl0RhhmMwBmMwBnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn + NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn + NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn + NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn + NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn + NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn + NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFmMwBmMwB0RhhzRBVmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBz + RBV3Sh1mMwBnNQJmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBnNQJmMwB3Sh18UCRmMwBqOQdnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFqOQdmMwB8UCR9USZmMwBrOQhn + NAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9 + USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwDm4N3///////// + ///////39fR0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL///////////////// + //////////////////////////////////////////////90SSZmMwBmMwBmMwBmMwBmMwB0SSb39fT/ + //////////////9mMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL///////////////////+YfWtmMwBmMwBm + MwBmMwB0SSbu6+n////////////39fR0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD39fT///// + ///////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5zUy8X////////////////L + v7itmo1mMwBmMwCYfWv///////90SSZmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhn + NAFmMwBmMwBmMwB0SSb////////////////////////Lv7hmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwDu6+n///////////////////////////////////////////////////////////+j + jH1mMwBmMwBmMwBmMwBmMwBmMwDm4N3///////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwC3p5z/ + ///////////////m4N1mMwBmMwBmMwBmMwBmMwBmMwCYfWv////////////////Bs6pmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwB0SSb///////////////////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCt + mo3////////////////////////////////////m4N2Mbli3p5z///////+jjH1mMwBmMwBmMwBmMwBm + MwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwCMblj///////////////////////////+M + blhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X///////////////////////////// + ///////////////////////////////Lv7hmMwBmMwBmMwBmMwBmMwBmMwDBs6r///////////////+3 + p5xmMwBmMwBmMwBmMwBmMwBmMwDm4N3///////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwDU + y8X///////////////+AXUJmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWv///////////////////90SSZm + MwBmMwBmMwBmMwBmMwBmMwBmMwDLv7j////////////////////////////////////////////39fTm + 4N3///////+3p5xmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwC3 + p5z////////////////////////////d1tFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3 + p5z////////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwCjjH3////////////////Lv7hmMwBmMwBmMwBmMwBmMwCAXUL///////////////////90 + SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL39fT////////////Lv7hmMwBmMwBmMwBmMwBmMwBmMwBm + MwC3p5z////////////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z////////////////////U + y8WAXUJmMwBmMwC3p5z39fT////////////////////Uy8VmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9 + USZ9USZmMwBrOQhnNAFmMwBmMwBmMwDBs6r////////////////u6+n///////////+tmo1mMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMblj///////////////////90SSZmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMblj////////////////m4N1mMwBmMwBmMwBm + MwBmMwC3p5z////////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z///////// + ///////////////////////////////////////////////////////Uy8VmMwBmMwBmMwBmMwBmMwBm + MwBmMwD39fT////////////////Lv7hmMwBmMwBmMwBmMwBmMwCAXULu6+n////////////////39fRm + MwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwDm4N3///////////// + //+jjH3////////////u6+lmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb///////////// + //////+jjH1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD3 + 9fT///////////////90SSZmMwBmMwBmMwBmMwDm4N3///////////////+jjH1mMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwDu6+n///////////////////////////////////////////////////// + //////+3p5xmMwBmMwBmMwBmMwBmMwBmMwCjjH3///////////////////+MblhmMwBmMwBmMwBmMwBm + MwBmMwCMblj///////////////////90SSZmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhn + NAFmMwBmMwBmMwD39fT///////////////9mMwDLv7j///////////+3p5xmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwDm4N3////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X///////////////+YfWtmMwBmMwBmMwCAXUL///////// + ///////39fR0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCYfWv///////////////////// + //////////////////////////////////////+jjH1mMwBmMwBmMwBmMwBmMwBmMwC3p5z///////// + //////////9mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X///////////////+jjH1mMwBmMwBmMwBm + MwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwCMblj////////////////m4N1mMwCAXUL39fT/ + ///////39fSAXUJmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r////////////////Uy8VmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z///////////// + ///////////////////////////////////////u6+lmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwDUy8X////////////u6+lmMwBmMwBmMwBmMwCMblj///////////////////90SSZmMwBm + MwBmMwBmMwBmMwBmMwC3p5z///////////////////9mMwBmMwBmMwB0SSb///////////////////// + //////////////+3p5xmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwCjjH3/ + ///////////////Uy8VmMwBmMwC3p5z////////////Lv7hmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwC3p5z////////////////////////////////////////////////////m4N1mMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwCjjH3////////////////////////////////////////////////////////////d + 1tGMblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL///////////////+tmo1mMwBmMwBmMwCt + mo3////////////////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z///////////////////90SSZm + MwBmMwBmMwDm4N3////////////////////////////////Uy8VmMwBmMwBmMwBmMwBnNAFrOQhmMwB9 + USZ9USZmMwBrOQhnNAFmMwBmMwC3p5z///////////////+3p5xmMwBmMwB0SSb39fT///////////+Y + fWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCMblj///////////////////////////////////////// + //////////////9mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb///////////////////////////// + //////////////////////////////////////+YfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3 + p5z////////////39fR0SSZmMwBmMwDBs6r////////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBm + MwCjjH3///////////////////+jjH1mMwBmMwBmMwDBs6r////////////////////////////////3 + 9fRmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwDUy8X///////////////+t + mo1mMwBmMwBmMwCtmo3////////////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwD39fT///// + //////////////////////////////////////////////+YfWtmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwDu6+n///////////////90SSZmMwBmMwBmMwBmMwBmMwCjjH3m4N3////////////////39fR0SSZm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDu6+n///////////+3p5xmMwBmMwDUy8X///////////// + //+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb////////////////////Bs6pmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhn + NAFmMwBmMwDu6+n///////////////+MblhmMwBmMwBmMwBmMwDu6+n///////////+tmo1mMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwDd1tH////////////////Bs6pmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X///////////////+YfWtmMwBmMwBmMwBmMwBmMwBm + MwB0SSbu6+n///////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH3///////// + ///39fSAXUJmMwD39fT///////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X///// + ///////////39fRmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r////Uy8W3p5y3p5yYfWtmMwBmMwBm + MwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwB0SSb///////////////////90SSZmMwBmMwBmMwBm + MwCtmo3////////////u6+l0SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r////////////////m4N1m + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwC3p5z///////// + //////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwDLv7j////////////////Bs6pmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwDUy8X////////////Lv7h0SSb///////////////////90SSZmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwCYfWv///////////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwDu + 6+n///////////////+jjH1mMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwCYfWv///// + ///////////u6+lmMwBmMwBmMwBmMwBmMwBmMwDd1tH///////////+3p5xmMwBmMwBmMwBmMwBmMwBm + MwBmMwCjjH3///////////////////90SSZmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwCYfWv////////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBmMwDm4N3///// + //////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL///////////////+tmo3/ + ///////////////m4N1mMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDBs6r///////////////// + //+YfWtmMwBmMwBmMwBmMwBmMwCtmo3////////////////u6+lmMwBmMwBmMwBmMwBnNAFrOQhmMwB9 + USZ9USZmMwBrOQhnNAFmMwC3p5z////////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwCYfWv///// + //////////+AXUJmMwBmMwBmMwBmMwBmMwBmMwCAXUL///////////////////+MblhmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwB0SSb////////////////u6+lmMwBm + MwBmMwBmMwBmMwCAXULLv7j///////////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwC3p5z////////////////////////////////Lv7hmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwDd1tH///////////////////+3p5x0SSZmMwBmMwC3p5z///////////////////+t + mo1mMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwDLv7j////////////////Bs6pm + MwBmMwBmMwBmMwBmMwBmMwBmMwDd1tH////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBmMwD39fT/ + //////////////////////////////////////////////////////////90SSZmMwBmMwBmMwBmMwBm + MwBmMwDm4N3////////////////////////////////////////////////////////////Bs6pmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDu6+n///////////////////////////+3 + p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDUy8X///////////////////////// + ///////////////////////////Lv7hmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhn + NAFmMwDm4N3///////////////+tmo1mMwBmMwBmMwBmMwBmMwBmMwBmMwCAXUL///////////////+Y + fWtmMwBmMwBmMwBmMwBmMwBmMwDUy8X///////////////////////////////////////////////// + //////////+YfWtmMwBmMwBmMwBmMwBmMwBmMwDLv7j///////////////////////////////////// + ///////////////////Uy8VmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCj + jH3///////////////////////////+MblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwCtmo339fT///////////////////////////////////////+tmo1mMwBmMwBmMwBmMwBmMwBm + MwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAF0SSb///////////////////+MblhmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwDLv7j////////////u6+l0SSZmMwBmMwBmMwBmMwBmMwC3p5z///////////////// + //////////////////////////////////////////+3p5xmMwBmMwBmMwBmMwBmMwBmMwC3p5z///// + ///////////////////////////////////////m4N23p5yMblhmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwDd1tH///////////////////////9mMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwCjjH23p5z39fT////////////////Uy8W3 + p5xmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9 + USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhn + NAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9 + USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ9USZmMwBrOQhnNAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNAFrOQhmMwB9USZ8UCRmMwBqOQdn + NAFmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBnNAFqOQdmMwB8UCR3Sh1mMwBnNQJmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBnNQJmMwB3Sh1zRBVmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBz + RBV0RhhmMwBmMwBnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn + NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn + NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn + NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn + NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn + NAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFnNAFn + NAFnNAFnNAFnNAFnNAFnNAFmMwBmMwB0Rhh/VClmMwBuPg5rOglrOQhrOQhrOQhrOQhrOQhrOQhrOQhr + OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr + OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr + OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr + OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr + OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhr + OQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOQhrOgluPg5mMwB/VCl4Sx5mMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBmMwBm + MwBmMwBmMwBmMwB4Sx6RbEd5TB+CWC59USZ8USV9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9 + USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9 + USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9 + USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9 + USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9 + USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ9 + USZ9USZ9USZ9USZ9USZ9USZ9USZ9USZ8USV9USaCWC55TB+RbEf///////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////d3fOrq+Krq+Krq+Krq+Krq+Krq+Lp6ff///////// + ///////////////////////////p6ferq+Krq+Krq+Krq+Krq+Krq+Krq+L///////////+rq+Krq+Kr + q+Krq+Krq+Krq+Krq+Krq+Krq+Krq+Krq+Krq+Krq+Krq+Ld3fP///////////////////////////// + //////////+rq+Krq+Krq+Krq+Krq+K4uOb////////////////////d3fOrq+Krq+Krq+Krq+Lp6ff/ + ///////////////p6ferq+Krq+Krq+Krq+Krq+Krq+K4uOb///////////////////+rq+Krq+Krq+Kr + q+Krq+Krq+Krq+L///////////////////+rq+Krq+Krq+Krq+Krq+K4uOb///////////////////// + ///////////p6ferq+Krq+Krq+Krq+Krq+LFxer////////////////////////////////d3fMpKcID + A70DA70DA70DA70DA72Ojtn////////////////////////////////////FxeoDA70DA70DA70DA70D + A70DA71ERMf///////////8pKcIDA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70D + A70DA71+ftTR0e////////////////////////////8pKcIDA70DA70DA70DA70pKcL///////////// + //////+rq+IDA70DA70DA70DA72Ojtn////////////////d3fMDA70DA70DA70DA70DA70DA71ERMf/ + //////////////////8pKcIDA70DA70DA70DA70DA70pKcL///////////////////8pKcIDA70DA70D + A70DA71ERMf///////////////////////////////+rq+IDA70DA70DA70DA70DA71ZWcv///////// + //////////////////////////+rq+IDA70DA70DA70DA70DA70DA73p6ff///////////////////// + //////////+rq+IDA70DA70DA70DA70DA70DA71+ftT///////////9ZWcsDA70DA70DA70DA70DA70D + A70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA72Ojtn///////////////////////9sbNAD + A70DA70DA70DA70DA73p6ff///////////////+OjtkDA70DA70DA70DA70DA73p6ff///////////// + //8pKcIDA70DA70DA70DA70DA70DA7309Pv///////////////9sbNADA70DA70DA70DA70DA70DA73p + 6ff///////////////9ZWcsDA70DA70DA70DA70DA7309Pv///////////////////////////8pKcID + A70DA70DA70DA70DA70DA73////////////////////////////////////09PspKcIDA70DA70DA70D + A70DA72rq+L///////////////////////////////+OjtkDA70DA70DA70DA70DA70DA72rq+L///// + //////+dnd0DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70D + A71ZWcv09Pv///////////////+dnd0DA70DA70DA70DA70DA73Fxer///////////////9ZWcsDA70D + A70DA70DA70DA72Ojtn///////////////9ZWcsDA70DA70DA70DA70DA70DA73d3fP///////////// + //+dnd0DA70DA70DA70DA70DA70DA73Fxer///////////////+OjtkDA70DA70DA70DA70DA73R0e// + //////////////////////+4uOYDA70DA70DA70DA70DA70DA70DA73d3fP///////////////////// + //////////////+rq+IDA70DA70DA70DA70DA70pKcL09Pv///////////////////////////9ZWcsD + A70DA70DA70DA70DA70DA73Fxer///////////+rq+IDA70DA70DA70DA70DA70DA70DA70DA70DA70D + A70DA70DA70DA70DA70DA70DA70DA70DA70DA71ZWcv///////////////+rq+IDA70DA70DA70DA70D + A72rq+L///////////////8pKcIDA70DA70DA70DA70DA70DA73p6ff///////////+OjtkDA70DA70D + A70DA70DA70DA72rq+L///////////////+rq+IDA70DA70DA70DA70DA70DA72rq+L///////////// + //+rq+IDA70DA70DA70DA70DA72rq+L///////////////////////9ZWcsDA70DA70DA70DA70DA70D + A70DA73Fxer////////////////////////////////////09PspKcIDA70DA70DA70DA70DA71+ftSr + q+Krq+Krq+Krq+Krq+Krq+Krq+IpKcIDA70DA70DA70DA70DA70DA73d3fP////////////R0e8DA70D + A70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA72dnd3/ + ///////////d3fMDA70DA70DA70DA70DA71+ftT////////////p6fcDA70DA70DA70DA70DA70DA70D + A72Ojtn///////////+rq+IDA70DA70DA70DA70DA70DA72dnd3////////////////R0e8DA70DA70D + A70DA70DA70DA71+ftT////////////////R0e8DA70DA70DA70DA70DA72dnd3///////////////// + ///R0e8DA70DA70DA70DA70DA70DA70DA70DA72dnd3///////////////////////////////////// + //+rq+IDA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70D + A70DA73////////////////09PsDA70DA70DA70DA70DA70DA72dnd3////////////09Purq+JZWcsD + A70DA70DA70DA70DA70DA70DA70DA73p6ff////////09PsDA70DA70DA70DA70DA71ZWcv///////// + ///FxeoDA70DA70DA70DA70DA70DA70DA70DA73p6ff////////R0e8DA70DA70DA70DA70DA70DA71s + bND////////////////09PsDA70DA70DA70DA70DA70DA71ZWcv////////////////09PsDA70DA70D + A70DA70DA71ZWcv///////////////////+OjtkDA70DA70DA70DA70DA70DA70DA70DA71+ftT///// + ///////////////////////////////////09PspKcIDA70DA70DA70DA70DA70DA70DA70DA70DA70D + A70DA70DA70DA70DA70DA70DA70DA70DA71ZWcv///////////////////8pKcIDA70DA70DA70DA70D + A71sbND///////////////////////+rq+IDA70DA70DA70DA70DA70DA70DA72Ojtn///////////9E + RMcDA70DA70DA70DA70DA73///////////+rq+IDA70DA70DA70DA70DA70DA70DA70DA72Ojtn///// + ///09PsDA70DA70DA70DA70DA70DA70pKcL///////////////////9ERMcDA70DA70DA70DA70DA70D + A73///////////////////8pKcIDA70DA70DA70DA70pKcL////////////////09PsDA70DA70DA70D + A70DA70DA70DA70DA70DA71ERMf///////////////////////////////////////////+rq+IDA70D + A70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA72Ojtn///////// + //////////9+ftQDA70DA70DA70DA70DA70pKcL///////////////////////////+OjtkDA70DA70D + A70DA70DA70DA70DA7309Pv///////9+ftQDA70DA70DA70DA70DA73d3fP///////+OjtkDA70DA70D + A70DA70DA70DA70DA70DA70DA73p6ff///////8pKcIDA70DA70DA70DA70DA70DA7309Pv///////// + //////9+ftQDA70DA70DA70DA70DA70DA73d3fP///////////////9+ftQDA70DA70DA70DA70DA73d + 3fP///////////+rq+IDA70DA70DA70DA70DA70DA70DA70DA70DA70DA7309Pv///////////////// + ///////////////////////09PspKcIDA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70D + A70DA70DA70DA70DA72rq+L///////////////////+dnd0DA70DA70DA70DA70DA70DA73p6ff///// + ///////////////////p6fcDA70DA70DA70DA70DA70DA70DA73Fxer///////+rq+IDA70DA70DA70D + A70DA724uOb///////9ZWcsDA70DA70DA70DA70DA70DA70DA70DA70DA72Ojtn///////9+ftQDA70D + A70DA70DA70DA70DA73Fxer///////////////+dnd0DA70DA70DA70DA70DA70DA724uOb///////// + //////+dnd0DA70DA70DA70DA70DA73Fxer///////////8pKcIDA70DA70DA70DA70DA70DA70DA70D + A70DA70DA73R0e////////////////////////////////////////////+rq+IDA70DA70DA70DA70D + A70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA73Fxer///////////////////+4uOYD + A70DA70DA70DA70DA70DA73Fxer///////////////////////////9+ftQDA70DA70DA70DA70DA70D + A72dnd3////////FxeoDA70DA70DA70DA70DA72dnd3///////8pKcIDA70DA70DA70DA70DA70DA70D + A70DA70DA70DA73R0e////+dnd0DA70DA70DA70DA70DA70DA72rq+L///////////////+4uOYDA70D + A70DA70DA70DA70DA72dnd3///////////////+4uOYDA70DA70DA70DA70DA72rq+L///////+4uOYD + A70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA72rq+L///////////////////////////////// + ///////////09PspKcIDA70DA70DA70DA70DA73R0e////////////9ZWcsDA70DA70DA70DA70DA70D + A73p6ff////////////////////d3fMDA70DA70DA70DA70DA70DA72rq+L///////////////////// + //////+rq+IDA70DA70DA70DA70DA70DA71sbND////////d3fMDA70DA70DA70DA70DA71+ftT////d + 3fMDA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA71sbND///+4uOYDA70DA70DA70DA70DA70D + A72Ojtn////////////////d3fMDA70DA70DA70DA70DA70DA71+ftT////////////////d3fMDA70D + A70DA70DA70DA71+ftT///////9sbNADA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA72dnd3/ + //////////////////////////////////////////////+rq+IDA70DA70DA70DA70DA71sbND///// + //////8DA70DA70DA70DA70DA70DA70pKcL///////////////////////////8DA70DA70DA70DA70D + A70DA72Ojtn////////////////////////////d3fMDA70DA70DA70DA70DA70DA71ERMf///////// + //8pKcIDA70DA70DA70DA70pKcL////FxeoDA70DA70DA70DA70DA70pKcKOjtkDA70DA70DA70DA70D + A73R0e/d3fMDA70DA70DA70DA70DA70DA71ZWcv///////////////////8DA70DA70DA70DA70DA70D + A70pKcL////////////////09PsDA70DA70DA70DA70DA71ZWcv////d3fMDA70DA70DA70DA70DA70D + A71ZWcsDA70DA70DA70DA70DA71ZWcv////////////////////////////////////////////////0 + 9PspKcIDA70DA70DA70DA70DA73p6ff////p6fcDA70DA70DA70DA70DA70DA71sbND///////////// + //////////////9ZWcsDA70DA70DA70DA70DA71ZWcv////////////////////////////p6fcDA70D + A70DA70DA70DA70DA71ERMf///////////9ZWcsDA70DA70DA70DA70DA7309Purq+IDA70DA70DA70D + A70DA71ZWcvp6fcDA70DA70DA70DA70DA71sbND///8DA70DA70DA70DA70DA70DA70DA73///////// + //////////9ZWcsDA70DA70DA70DA70DA70DA7309Pv///////////////9ZWcsDA70DA70DA70DA70D + A73///+OjtkDA70DA70DA70DA70DA70DA724uOZZWcsDA70DA70DA70DA70pKcL///////////////// + //////////////////////////////////+rq+IDA70DA70DA70DA70DA72Ojtn////FxeoDA70DA70D + A70DA70DA70DA72dnd3///////////////////////////9+ftQDA70DA70DA70DA70DA70DA73///// + ///////////////////////p6fcDA70DA70DA70DA70DA70DA71ERMf///////////+OjtkDA70DA70D + A70DA70DA73R0e9+ftQDA70DA70DA70DA70DA72Ojtn///+dnd0DA70DA70DA70DA70DA73R0e9ZWcsD + A70DA70DA70DA70DA70DA73d3fP///////////////9+ftQDA70DA70DA70DA70DA70DA73R0e////// + //////////9+ftQDA70DA70DA70DA70DA73R0e8DA70DA70DA70DA70DA70DA70pKcL09Pt+ftQDA70D + A70DA70DA70DA73p6ff////////////////////////////////////////////////09PspKcIDA70D + A70DA70DA70DA73p6ferq+IDA70DA70DA70DA70DA70DA72rq+L///////////////////////////+r + q+IDA70DA70DA70DA70DA70DA73d3fP////////////////////////d3fMDA70DA70DA70DA70DA70D + A71ZWcv///////////+rq+IDA70DA70DA70DA70DA72rq+JZWcsDA70DA70DA70DA70DA72rq+L////0 + 9PspKcIDA70DA70DA70DA71sbNB+ftQDA70DA70DA70DA70DA70DA73Fxer///////////////+rq+ID + A70DA70DA70DA70DA70DA72rq+L///////////////+rq+IDA70DA70DA70DA70DA71ZWcsDA70DA70D + A70DA70DA70DA72dnd3///+rq+IDA70DA70DA70DA70DA73Fxer///////////////////////////// + //////////////////////+rq+IDA70DA70DA70DA70DA72rq+Kdnd0DA70DA70DA70DA70DA70DA73R + 0e/////////////////////////////FxeoDA70DA70DA70DA70DA70DA73Fxer///////////////// + //////+rq+IDA70DA70DA70DA70DA70DA71+ftT////////////R0e8DA70DA70DA70DA70DA72OjtkD + A70DA70DA70DA70DA70DA73Fxer///////+rq+IDA70DA70DA70DA70DA71sbNADA70DA70DA70DA70D + A70DA72dnd3////////////////FxeoDA70DA70DA70DA70DA70DA72dnd3////////////////FxeoD + A70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA73p6ff////FxeoDA70DA70DA70DA70DA72r + q+L////////////////////////////////////////////////////09PspKcIDA70DA70DA70DA70p + KcJZWcsDA70DA70DA70DA70DA70DA7309Pv////////////////////////////p6fcDA70DA70DA70D + A70DA70DA72dnd3////////////////////09PspKcIDA70DA70DA70DA70DA70DA72rq+L///////// + ///09PsDA70DA70DA70DA70DA70pKcIDA70DA70DA70DA70DA70DA73d3fP////////09PspKcIDA70D + A70DA70DA70DA70DA70DA70DA70DA70DA70DA71+ftT////////////////p6fcDA70DA70DA70DA70D + A70DA71ZWcv////////////////d3fMDA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA71sbND/ + ///////d3fMDA70DA70DA70DA70DA71+ftT///////////////////////////////////////////// + //////////+rq+IDA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70pKcL///////////////// + //////////////////8pKcIDA70DA70DA70DA70DA71+ftT////////////////p6fdZWcsDA70DA70D + A70DA70DA70DA70DA73p6ff///////////////8pKcIDA70DA70DA70DA70DA70DA70DA70DA70DA70D + A70DA73///////////////+rq+IDA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA71ERMf///// + //////////////8pKcIDA70DA70DA70DA70DA70pKcL///////////////////8pKcIDA70DA70DA70D + A70DA70DA70DA70DA70DA70DA73Fxer///////////8pKcIDA70DA70DA70DA71ZWcv///////////// + ///////////////////////////////////////////09PspKcIDA70DA70DA70DA70DA70DA70DA70D + A70DA70DA71+ftT///////////////////////////////////9ZWcsDA70DA70DA70DA70DA70pKcKr + q+Krq+Krq+JsbNADA70DA70DA70DA70DA70DA70DA70DA71sbND///////////////////9+ftQDA70D + A70DA70DA70DA70DA70DA70DA70DA70DA71ERMf////////////////09PspKcIDA70DA70DA70DA70D + A70DA70DA70DA70DA70DA70DA7309Pv///////////////9ZWcsDA70DA70DA70DA70DA70DA73p6ff/ + //////////////9ZWcsDA70DA70DA70DA70DA70DA70DA70DA70DA71ERMf///////////////9ZWcsD + A70DA70DA70DA70DA73///////////////////////////////////////////////////////////+r + q+IDA70DA70DA70DA70DA70DA70DA70DA70DA70DA72dnd3///////////////////////////////// + //+dnd0DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA73p + 6ff///////////////////+dnd0DA70DA70DA70DA70DA70DA70DA70DA70DA70DA71+ftT///////// + //////////+rq+IDA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA73d3fP///////////////+d + nd0DA70DA70DA70DA70DA70DA73Fxer///////////////+OjtkDA70DA70DA70DA70DA70DA70DA70D + A70DA72rq+L///////////////+OjtkDA70DA70DA70DA70DA73d3fP///////////////////////// + ///////////////////////////////09PspKcIDA70DA70DA70DA70DA70DA70DA70DA70DA724uOb/ + //////////////////////////////////+rq+IDA70DA70DA70DA70DA70DA70DA70DA70DA70DA70D + A70DA70DA70DA70DA70DA70DA72rq+L///////////////////////+4uOYDA70DA70DA70DA70DA70D + A70DA70DA70DA70DA72dnd3////////////////////09PspKcIDA70DA70DA70DA70DA70DA70DA70D + A70DA70DA72rq+L///////////////+rq+IDA70DA70DA70DA70DA70DA72rq+L///////////////+r + q+IDA70DA70DA70DA70DA70DA70DA70DA70DA7309Pv///////////////+rq+IDA70DA70DA70DA70D + A724uOb///////////////////////////////////////////////////////////+rq+IDA70DA70D + A70DA70DA70DA70DA70DA70DA73d3fP////////////////////////////////////R0e8DA70DA70D + A70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA72dnd3///////////////////// + ///////d3fMDA70DA70DA70DA70DA70DA70DA70DA70DA70DA724uOb///////////////////////+r + q+IDA70DA70DA70DA70DA70DA70DA70DA70DA70DA72dnd3////////////////R0e8DA70DA70DA70D + A70DA70DA71+ftT////////////////R0e8DA70DA70DA70DA70DA70DA70DA70DA72Ojtn///////// + ///////////FxeoDA70DA70DA70DA70DA72dnd3///////////////////////////////////////// + ///////////////////09PspKcIDA70DA70DA70DA70DA70DA70DA70DA7309Pv///////////////// + ///////////////////09PsDA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70DA70p + KcLFxer///////////////////////////////////8DA70DA70DA70DA70DA70DA70DA70DA70DA70D + A73R0e/////////////////////////09PspKcIDA70DA70DA70DA70DA70DA70DA70DA70DA71sbND/ + ///////////////09PsDA70DA70DA70DA70DA70DA71ZWcv////////////////09PsDA70DA70DA70D + A70DA70DA70DA70DA73R0e/////////////////////09PsDA70DA70DA70DA70DA71+ftT///////// + //////////////////////////////////////////////////////+rq+IDA70DA70DA70DA70DA70D + A70DA71ZWcv///////////////////////////////////////////8pKcIDA70DA70DA70DA70DA70D + A70DA70DA70DA70DA70pKcKrq+Krq+L///////////////////////////////////////////9ZWcsD + A70DA70DA70DA70DA70DA70DA70DA70DA7309Pv///////////////////////////+rq+IDA70DA70D + A70DA70DA70DA70DA70DA70DA70DA73///////////////////8pKcIDA70DA70DA70DA70DA70DA73/ + //////////////////8pKcIDA70DA70DA70DA70DA70DA71ZWcv///////////////////////////8p + KcIDA70DA70DA70DA71ERMf///////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/VERAG_PROG_ALLGEMEIN/AuditFlow/frmAuditFlow_Pruefungen.vb b/VERAG_PROG_ALLGEMEIN/AuditFlow/frmAuditFlow_Pruefungen.vb new file mode 100644 index 00000000..dcb222b2 --- /dev/null +++ b/VERAG_PROG_ALLGEMEIN/AuditFlow/frmAuditFlow_Pruefungen.vb @@ -0,0 +1,131 @@ +Imports System.Windows.Forms +Imports com.sun.org.apache.xml.internal.security.keys.content +Imports javax.xml.bind.annotation + +Public Class frmAuditFlow_Pruefungen + + Dim AF_PO As cAuditFlow_Pruefobjekte = Nothing + Dim AF_PRUEF As cAuditFlow_Pruefungen = Nothing + + Sub New() + + ' Dieser Aufruf ist für den Designer erforderlich. + InitializeComponent() + + ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. + + End Sub + + Sub New(wartPO_Id, wartPruef_Id) + + ' Dieser Aufruf ist für den Designer erforderlich. + InitializeComponent() + + ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. + AF_PO = New cAuditFlow_Pruefobjekte(wartPO_Id) + AF_PRUEF = New cAuditFlow_Pruefungen(wartPruef_Id) + End Sub + + + + + Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click + Try + Me.Cursor = Cursors.WaitCursor + If checkValues() Then + + getValues() + If AF_PRUEF.SAVE Then + Me.Close() + End If + End If + + Catch ex As Exception + + End Try + Me.Cursor = Cursors.Default + End Sub + + Function checkValues() As Boolean + ' If xxxx._value = "" Then MsgBox("Firma angeben!") : Return False + + Return True + End Function + Sub getValues() + AF_PO.wartPO_Firma = cboFirma._value + AF_PO.wartPO_Niederlasung = cboNL._value + AF_PO.wartPO_StandortId = cboStandort._value + AF_PO.wartPO_Kategorie = cboKategorie._value + + AF_PO.wartPO_Bezeichnung = txtBezeichnung.Text + AF_PO.wartPO_Kennung = txtKennung.Text + AF_PO.wartPO_zustaendigIntern_MaId = cboMA._value + AF_PO.wartPO_zustaendigIntern_Name = cboMA.Text + + ' AF_PO.wartPO_startdatum = datVon._value + + AF_PRUEF.wartPruef_Faelligkeitsdatum = datVon._value + + + + + + End Sub + + Sub setValues() + + datVon._value = AF_PRUEF.wartPruef_Faelligkeitsdatum + + End Sub + + Private Sub frmAuditFlow_Pruefungsojekt_Load(sender As Object, e As EventArgs) Handles Me.Load + cboKategorie.Items.Clear() + cboKategorie.fillWithSQL("SELECT wartK_Kategorie,[wartK_KategorieBezeichnung] FROM [tblAuditFlow_Kategorien] order by wartK_KategorieBezeichnung", False, "ADMIN", True) + + cboNL.Items.Clear() + cboNL.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("", "")) + cboNL.SelectedItem = 0 + + cboFirma.Items.Clear() + cboFirma.fillWithSQL("SELECT distinct(Firma) FROM [Filialen] order by Firma", False, "FMZOLL", True) + cboFirma.changeItem(cAllgemein.FIRMA) + + + cboMA.fillWithSQL("SELECT [mit_id],[mit_vname] + ' '+ [mit_nname] as Name " & + " FROM [ADMIN].[dbo].[tblMitarbeiter] WHERE [mit_gekuendigt]=0 order by name", False, "ADMIN", True) + + + If AF_PRUEF Is Nothing Then + AF_PRUEF = New cAuditFlow_Pruefungen(-1) + Else + setValues() + End If + + End Sub + + + + Private Sub cboFirma_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboFirma.SelectedIndexChanged + cboNL.Items.Clear() + cboNL.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("", "")) + If cboFirma._value <> "" Then + cboNL.fillWithSQL("SELECT nl_kuerzel,nl_bezeichnung FROM [tblNiederlassungen] where [nl_firma]='" & cboFirma._value & "' order by nl_bezeichnung", False, "ADMIN", False) + End If + + End Sub + + Private Sub cboNL_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboNL.SelectedIndexChanged + cboStandort.Items.Clear() + cboStandort.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("", "")) + If cboFirma._value <> "" AndAlso cboNL._value <> "" Then + cboStandort.fillWithSQL("SELECT [wartSt_Id],[wartSt_Standort] FROM [tblAuditFlow_Standorte] where [wartSt_Aktiv]=1 and [wartSt_Firma]='" & cboFirma._value & "' AND [wartSt_Niederlasung]='" & cboNL._value & "' order by wartSt_Standort", False, "ADMIN", True) + End If + End Sub + + + + Private Sub frmAuditFlow_Pruefungsojekt_Shown(sender As Object, e As EventArgs) Handles Me.Shown + + End Sub + +End Class \ No newline at end of file diff --git a/VERAG_PROG_ALLGEMEIN/Classes/cKundenMatchResult.vb b/VERAG_PROG_ALLGEMEIN/Classes/cKundenMatchResult.vb new file mode 100644 index 00000000..39f920fb --- /dev/null +++ b/VERAG_PROG_ALLGEMEIN/Classes/cKundenMatchResult.vb @@ -0,0 +1,241 @@ +Imports System.Data.SqlClient +Imports System.Globalization +Imports System.Text +Imports System.Text.RegularExpressions +Imports com.sun.org.apache.bcel.internal.generic + +Public Class KundeMatchResult + Public Property KundId As Integer? + Public Property Score As Double + Public Property MatchType As String ' "VAT", "EORI", "BOTH", "FUZZY", "NONE" + Public Property Firma As String + Public Property Strasse As String + Public Property PLZ As String + Public Property Ort As String + Public Property LandKz As String + Public Property VATNr As String + Public Property EORINr As String +End Class + +Public Module KundenMatcher + + ' Haupteinstieg + Public Function FindKunde(ByVal firma As String, + ByVal strasse As String, + ByVal plz As String, + ByVal ort As String, + ByVal landISO As String, + Optional ByVal vatNr As String = Nothing, + Optional ByVal eoriNr As String = Nothing, + Optional ByVal minFuzzyScore As Double = 0.7) As KundeMatchResult + + ' 1) Harte (exakte) Matches über VAT/EORI — 100% required + Dim exact = FindExactByVatEori(vatNr, eoriNr) + If exact IsNot Nothing Then + Return exact + End If + Dim LandKz = VERAG_PROG_ALLGEMEIN.cProgramFunctions.getISO1Land(landISO) + + ' 2) Fuzzy-Match auf Firma + Adresse + Dim candidates = LoadFuzzyCandidates(firma, plz, ort, LandKz) + If candidates.Count = 0 Then + Return New KundeMatchResult With {.MatchType = "NONE", .Score = 0} + End If + + Dim normFirma = NormalizeForCompare(firma) + Dim normStrasse = NormalizeForCompare(strasse) + Dim normOrt = NormalizeForCompare(ort) + Dim best As KundeMatchResult = Nothing + + For Each c In candidates + Dim fScore = Similarity(normFirma, NormalizeForCompare(c.Firma)) + Dim sScore = Similarity(normStrasse, NormalizeForCompare(c.Strasse)) + Dim oScore = Similarity(normOrt, NormalizeForCompare(c.Ort)) + + ' Gewichtung nach Praxis: Name wichtiger als Straße, Ort mittel + Dim score = 0.5 * fScore + 0.3 * sScore + 0.2 * oScore + + ' Bonus/Malus für PLZ/Land-Genauigkeit + If SafeEquals(plz, c.PLZ) Then score += 0.05 + If SafeEquals(LandKz, c.LandKz) Then score += 0.05 + + If best Is Nothing OrElse score > best.Score Then + best = New KundeMatchResult With { + .KundId = c.KundId, + .Score = Math.Min(score, 1.0), + .MatchType = "FUZZY", + .Firma = c.Firma, + .Strasse = c.Strasse, + .PLZ = c.PLZ, + .Ort = c.Ort, + .LandKz = c.LandKz, + .VATNr = c.VATNr, + .EORINr = c.EORINr + } + End If + Next + + If best IsNot Nothing AndAlso best.Score >= minFuzzyScore Then + Return best + Else + Return New KundeMatchResult With {.MatchType = "NONE", .Score = If(best Is Nothing, 0, best.Score)} + End If + End Function + + ' --------------------------- + ' 1) Exakt über VAT/EORI + ' --------------------------- + Private Function FindExactByVatEori(vatNr As String, eoriNr As String) As KundeMatchResult + If String.IsNullOrWhiteSpace(vatNr) AndAlso String.IsNullOrWhiteSpace(eoriNr) Then + Return Nothing + End If + + Dim sql As New StringBuilder("SELECT TOP 1 * FROM Adressen INNER JOIN Kunden on AdressenNr=KundenNr WHERE 1=1") + If Not String.IsNullOrWhiteSpace(vatNr) Then + sql.Append(" AND isnull(UstIdKz,'')+isnull(UstIdNr,'') = @vat") + End If + If Not String.IsNullOrWhiteSpace(eoriNr) Then + sql.Append(" AND EORITIN = @eori") + End If + + Using con As SqlConnection = VERAG_PROG_ALLGEMEIN.SQL.GetNewOpenConnectionFMZOLL() + Using cmd As New SqlCommand(sql.ToString(), con) + If Not String.IsNullOrWhiteSpace(vatNr) Then cmd.Parameters.AddWithValue("@vat", vatNr) + If Not String.IsNullOrWhiteSpace(eoriNr) Then cmd.Parameters.AddWithValue("@eori", eoriNr) + con.Open() + Using r = cmd.ExecuteReader() + If r.Read() Then + Dim mt As String = If(Not String.IsNullOrWhiteSpace(vatNr) AndAlso Not String.IsNullOrWhiteSpace(eoriNr), "BOTH", + If(Not String.IsNullOrWhiteSpace(vatNr), "VAT", "EORI")) + Return New KundeMatchResult With { + .KundId = CInt(r("kundId")), + .Score = 1.0, + .MatchType = mt, + .Firma = r("Firma").ToString(), + .Strasse = r("Strasse").ToString(), + .PLZ = r("PLZ").ToString(), + .Ort = r("Ort").ToString(), + .LandKz = r("LandKz").ToString(), + .VATNr = r("VATNr").ToString(), + .EORINr = r("EORINr").ToString() + } + End If + End Using + End Using + End Using + + Return Nothing + End Function + + ' --------------------------------- + ' 2) Kandidaten für Fuzzy-Matching + ' --------------------------------- + Private Function LoadFuzzyCandidates(firma As String, plz As String, + ort As String, LandKz As String) As List(Of KundeMatchResult) + + ' Schneller Vorfilter, um nicht die ganze Tabelle zu ziehen: + ' - gleiches Land (wenn angegeben) + ' - PLZ/Ort (wenn angegeben) + ' - Firma LIKE (erste 3–5 Zeichen), um Suchraum zu verringern + Dim whereClauses As New List(Of String) + If Not String.IsNullOrWhiteSpace(LandKz) Then whereClauses.Add("landKz = @land") + If Not String.IsNullOrWhiteSpace(plz) Then whereClauses.Add("PLZ = @plz") + If Not String.IsNullOrWhiteSpace(ort) Then whereClauses.Add("Ort LIKE @ortLike") + Dim firmaStart = Left(NormalizeForCompare(firma), Math.Min(5, Math.Max(0, firma.Length))) + If firmaStart.Length >= 3 Then whereClauses.Add("([name 1]+' ' + isnull([Name 2],'')) LIKE @firmaLike") + + Dim sql = "SELECT TOP 200 KundenNr, [name 1]+' ' + isnull([Name 2],'') as [name], strasse, PLZ, Ort, landKz,isnull(UstIdKz,'')+isnull(UstIdNr,'') VATNr, EORITIN FROM Adressen inner join Kunden on AdressenNr=KundenNr " + If whereClauses.Count > 0 Then + sql &= " WHERE " & String.Join(" AND ", whereClauses) + End If + + Dim list As New List(Of KundeMatchResult) + Using con As SqlConnection = VERAG_PROG_ALLGEMEIN.SQL.GetNewOpenConnectionFMZOLL() + Using cmd As New SqlCommand(sql, con) + If Not String.IsNullOrWhiteSpace(LandKz) Then cmd.Parameters.AddWithValue("@land", LandKz) + If Not String.IsNullOrWhiteSpace(plz) Then cmd.Parameters.AddWithValue("@plz", plz) + If Not String.IsNullOrWhiteSpace(ort) Then cmd.Parameters.AddWithValue("@ortLike", ort & "%") + If firmaStart.Length >= 3 Then cmd.Parameters.AddWithValue("@firmaLike", "%" & firmaStart & "%") + con.Open() + Using r = cmd.ExecuteReader() + While r.Read() + list.Add(New KundeMatchResult With { + .KundId = CInt(r("kundId")), + .Firma = r("Firma").ToString(), + .Strasse = r("Strasse").ToString(), + .PLZ = r("PLZ").ToString(), + .Ort = r("Ort").ToString(), + .LandKz = r("LandKz").ToString(), + .VATNr = r("VATNr").ToString(), + .EORINr = r("EORINr").ToString() + }) + End While + End Using + End Using + End Using + Return list + End Function + + ' ----------------------- + ' Ähnlichkeit & Helpers + ' ----------------------- + ' Levenshtein-Ähnlichkeit (0..1); robust bei Kürze + Private Function Similarity(a As String, b As String) As Double + If String.IsNullOrEmpty(a) AndAlso String.IsNullOrEmpty(b) Then Return 1 + If String.IsNullOrEmpty(a) OrElse String.IsNullOrEmpty(b) Then Return 0 + Dim dist = LevenshteinDistance(a, b) + Dim maxLen = Math.Max(a.Length, b.Length) + If maxLen = 0 Then Return 1 + Return 1.0 - (CDbl(dist) / maxLen) + End Function + + Private Function LevenshteinDistance(s As String, t As String) As Integer + Dim n = If(s Is Nothing, 0, s.Length) + Dim m = If(t Is Nothing, 0, t.Length) + If n = 0 Then Return m + If m = 0 Then Return n + + Dim d(n, m) As Integer + For i = 0 To n : d(i, 0) = i : Next + For j = 0 To m : d(0, j) = j : Next + + For i = 1 To n + For j = 1 To m + Dim cost = If(s(i - 1) = t(j - 1), 0, 1) + d(i, j) = Math.Min( + Math.Min(d(i - 1, j) + 1, d(i, j - 1) + 1), + d(i - 1, j - 1) + cost + ) + Next + Next + Return d(n, m) + End Function + + ' Normalisierung: Großschreibung, Diakritika entfernen, Sonderzeichen/Mehrfachspaces eliminieren + Public Function NormalizeForCompare(input As String) As String + If String.IsNullOrWhiteSpace(input) Then Return String.Empty + Dim s = input.ToUpperInvariant().Trim() + + ' diakritische Zeichen entfernen + Dim formD = s.Normalize(NormalizationForm.FormD) + Dim sb As New StringBuilder() + For Each ch As Char In formD + Dim uc = CharUnicodeInfo.GetUnicodeCategory(ch) + If uc <> UnicodeCategory.NonSpacingMark Then sb.Append(ch) + Next + s = sb.ToString().Normalize(NormalizationForm.FormC) + + ' Hausnummern-Zusätze zusammenführen, Punkte/Kommas/Slash entfernen + s = Regex.Replace(s, "[\.\,\/\\\-_]", " ") + ' "STRASSE" vs "STR." angleichen (einfacher Heuristik-Schritt) + s = Regex.Replace(s, "\bSTR\.\b", "STRASSE") + ' Doppelte/mehrfache Spaces + s = Regex.Replace(s, "\s+", " ").Trim() + Return s + End Function + + Private Function SafeEquals(a As String, b As String) As Boolean + Return String.Equals(NormalizeForCompare(a), NormalizeForCompare(b), StringComparison.Ordinal) + End Function + +End Module \ No newline at end of file diff --git a/VERAG_PROG_ALLGEMEIN/Classes/cMitarbeiter.vb b/VERAG_PROG_ALLGEMEIN/Classes/cMitarbeiter.vb index 52ace0c9..4ef1cafc 100644 --- a/VERAG_PROG_ALLGEMEIN/Classes/cMitarbeiter.vb +++ b/VERAG_PROG_ALLGEMEIN/Classes/cMitarbeiter.vb @@ -468,4 +468,16 @@ Public Class cMitarbeiter End Select Return "" End Function + + Public Shared Function GetUserParam(param As String, Optional maId As Integer = -1, Optional defaultReturn As Object = Nothing) As String + Dim result As String = Nothing + If maId < 0 Then + If VERAG_PROG_ALLGEMEIN.cAllgemein.MITARBEITER Is Nothing Then Return defaultReturn + maId = VERAG_PROG_ALLGEMEIN.cAllgemein.MITARBEITER.mit_id + End If + + Dim Value = (New VERAG_PROG_ALLGEMEIN.SQL).DLookup("usrPr_value", "tblMitarbeiter_UserParams", "usrPr_maId = '" & maId & "' AND usrPr_parameter = '" & param & "'", "ADMIN", defaultReturn) + Return Value + End Function + End Class diff --git a/VERAG_PROG_ALLGEMEIN/Schnittstellen/DHF/cDHF_Artikel.vb b/VERAG_PROG_ALLGEMEIN/Schnittstellen/DHF/cDHF_Artikel.vb index b39213da..af97356c 100644 --- a/VERAG_PROG_ALLGEMEIN/Schnittstellen/DHF/cDHF_Artikel.vb +++ b/VERAG_PROG_ALLGEMEIN/Schnittstellen/DHF/cDHF_Artikel.vb @@ -1,5 +1,6 @@ -Imports System.Reflection -Imports System.Data.SqlClient +Imports System.Data.SqlClient +Imports System.Reflection +Imports com.sun.org.apache.xml.internal.security.transforms ' ======================== ' 📦 Hauptklasse: DHF_Artikel @@ -28,14 +29,22 @@ Public Class DHF_Artikel Public Function Save() As Boolean Dim result = db.Save("imArtikel", GetParameterList()) - For Each tarif In ArtikelTarife - tarif.LizenzNr = LizenzNr - tarif.FremdAdressID = FremdAdressID - tarif.FremdKennung = FremdKennung - tarif.ArtikelCode = ArtikelCode - tarif.Save() - Next - Return result + If result = False Then + Return False ' Fehler beim Speichern der Hauptdaten + Else + + For Each tarif In ArtikelTarife + tarif.LizenzNr = LizenzNr + tarif.FremdAdressID = FremdAdressID + tarif.FremdKennung = FremdKennung + tarif.ArtikelCode = ArtikelCode + tarif.Save() + Next + 'DatenKomplete setzten -> Das Triggert die Verarbeitung der ArtikelTarife in Zolaris + db.UpdateDatenKomplett("imArtikel", GetParameterList()) + + Return result + End If End Function Public Function Delete() As Boolean @@ -45,13 +54,36 @@ Public Class DHF_Artikel Return db.Delete("imArtikel", GetParameterList()) End Function - Public Shared Function Delete_KD(KdNr As String) As Boolean + Public Shared Function Delete_KD(FremdAdressID As String, Optional LizenzNr As String = "S01122") As Boolean ' FremdAdressID= VERAG KdNr + ' Dim AdressID_DHF As Integer = -1 Dim db As New DHF_DBHelper - db.DeleteByFremdAdressID("imArtikelTarifZucodes", KdNr) - db.DeleteByFremdAdressID("imArtikelTarif", KdNr) - Return db.DeleteByFremdAdressID("imArtikel", KdNr) + ' AdressID_DHF = (New VERAG_PROG_ALLGEMEIN.SQL).DLookup("AdressID", "zzAdressen", "FremdAdressID='" & KdNr & "' ", "EZOLL", -1) + + If FremdAdressID <> "" Then + db.DeleteByFremdAdressID("imArtikelTarifZucodes", FremdAdressID, LizenzNr) + db.DeleteByFremdAdressID("imArtikelTarif", FremdAdressID, LizenzNr) + Return db.DeleteByFremdAdressID("imArtikel", FremdAdressID, LizenzNr) + Else + Return False + End If + End Function + Public Shared Function Delete_KDLiveDate(FremdAdressID As String, Optional LizenzNr As String = "S01122") As Boolean ' FremdAdressID= VERAG KdNr + Dim AdressID_DHF As Integer = -1 + Dim db As New DHF_DBHelper + AdressID_DHF = (New VERAG_PROG_ALLGEMEIN.SQL).DLookup("AdressID", "zzAdressen", "FremdAdressID='" & FremdAdressID & "' AND LizenzNr='" & LizenzNr & "'", "EZOLL", -1) + Console.WriteLine(AdressID_DHF) + If AdressID_DHF > 0 Then + db.DeleteByAdressID("zzArtikelTarifZucodes", AdressID_DHF, LizenzNr) + db.DeleteByAdressID("zzArtikelTarif", AdressID_DHF, LizenzNr) + Return db.DeleteByAdressID("zzArtikel", AdressID_DHF, LizenzNr) + Else + Return False + End If + End Function + + Private Function GetParameterList() As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) Return New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) From { New VERAG_PROG_ALLGEMEIN.SQLVariable("LizenzNr", LizenzNr, , True), @@ -164,6 +196,14 @@ End Class Public Class DHF_DBHelper Private SQL As New SQL + Public Function SaveandDatenKomplete(tableName As String, params As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)) As Boolean + If Save(tableName, params) Then + UpdateDatenKomplett(tableName, params) + Return True + End If + Return False + End Function + Public Function Save(tableName As String, params As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)) As Boolean Dim whereClause = GetPrimaryKeyWhere(params) Dim existsSQL = "SELECT COUNT(*) FROM [" & tableName & "] WHERE " & whereClause @@ -184,19 +224,37 @@ Public Class DHF_DBHelper sqlCmd = GetInsertCmd(tableName, params) End If + Return SQL.doSQLVarList(sqlCmd, "EZOLL", , params) End Function + Public Function UpdateDatenKomplett(tableName As String, params As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)) As Boolean + Return SQL.doSQLVarList("update [" & tableName & "] set [DatenKomplett]=1 where + lizenzNr=@LizenzNr AND FremdAdressID=@FremdAdressID AND FremdKennung=@FremdKennung + and ArtikelCode=@ArtikelCode", "EZOLL", , params) + End Function + Public Function Delete(tableName As String, params As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)) As Boolean Dim whereClause = GetPrimaryKeyWhere(params) Dim sqlstr = "DELETE FROM [" & tableName & "] WHERE " & whereClause Return SQL.doSQLVarList(sqlstr, "EZOLL", , params) End Function - Public Function DeleteByFremdAdressID(tableName As String, fremdAdressID As String) As Boolean - Dim sqlstr = "DELETE FROM [" & tableName & "] WHERE [FremdAdressID]=@FID" + Public Function DeleteByFremdAdressID(tableName As String, fremdAdressID As String, Optional LizenzNr As String = "S01122") As Boolean + Dim sqlstr = "DELETE FROM [" & tableName & "] WHERE [FremdAdressID]=@FID AND LizenzNr=@LizenzNr " Dim list As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) From { - New VERAG_PROG_ALLGEMEIN.SQLVariable("FID", fremdAdressID) + New VERAG_PROG_ALLGEMEIN.SQLVariable("FID", fremdAdressID), + New VERAG_PROG_ALLGEMEIN.SQLVariable("LizenzNr", LizenzNr) + } + Return SQL.doSQLVarList(sqlstr, "EZOLL", , list) + End Function + + + Public Function DeleteByAdressID(tableName As String, AdressID As String, Optional LizenzNr As String = "S01122") As Boolean + Dim sqlstr = "DELETE FROM [" & tableName & "] WHERE [AdressID]=@FID AND LizenzNr=@LizenzNr " + Dim list As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) From { + New VERAG_PROG_ALLGEMEIN.SQLVariable("FID", AdressID), + New VERAG_PROG_ALLGEMEIN.SQLVariable("LizenzNr", LizenzNr) } Return SQL.doSQLVarList(sqlstr, "EZOLL", , list) End Function @@ -230,7 +288,6 @@ Public Class DHF_ArtikelBeispiel DHF_Artikel.Delete_KD(KdNr) - MsgBox("del") Dim artikel As New DHF_Artikel With { .LizenzNr = "S01122", diff --git a/VERAG_PROG_ALLGEMEIN/VERAG_PROG_ALLGEMEIN.vbproj b/VERAG_PROG_ALLGEMEIN/VERAG_PROG_ALLGEMEIN.vbproj index 889bcf18..40ee4b14 100644 --- a/VERAG_PROG_ALLGEMEIN/VERAG_PROG_ALLGEMEIN.vbproj +++ b/VERAG_PROG_ALLGEMEIN/VERAG_PROG_ALLGEMEIN.vbproj @@ -178,6 +178,12 @@ Form + + frmAuditFlow_Pruefungen.vb + + + Form + frmAuditFlow_Pruefungsojekt.vb @@ -753,6 +759,9 @@ frmAuditFlow.vb + + frmAuditFlow_Pruefungen.vb + frmAuditFlow_Pruefungsojekt.vb From 0100b3ed898a94ca24acd4a7a38155dc8c888702 Mon Sep 17 00:00:00 2001 From: Andreas Luxbauer Date: Wed, 20 Aug 2025 21:32:47 +0200 Subject: [PATCH 2/2] ADMIN UsrParam, DHF Import --- .../ATLAS/EZA/usrCntlATLAS_EZA.Designer.vb | 344 +++++---- .../DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.vb | 321 +++++++- .../AuditFlow/Classes/cAuditFlow.vb | 2 +- .../Schnittstellen/DHF/cDHF_Import.vb | 729 ++++++++++++++++++ .../VERAG_PROG_ALLGEMEIN.vbproj | 1 + 5 files changed, 1211 insertions(+), 186 deletions(-) create mode 100644 VERAG_PROG_ALLGEMEIN/Schnittstellen/DHF/cDHF_Import.vb diff --git a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.Designer.vb b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.Designer.vb index 7d2722ed..72449c04 100644 --- a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.Designer.vb +++ b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.Designer.vb @@ -24,17 +24,8 @@ Partial Class usrCntlATLAS_EZA Private Sub InitializeComponent() Me.components = New System.ComponentModel.Container() Me.SplitContainer = New System.Windows.Forms.SplitContainer() - Me.MyFlowLayoutPanel1 = New VERAG_PROG_ALLGEMEIN.MyFlowLayoutPanel(Me.components) - Me.btnAllgemein = New System.Windows.Forms.Button() - Me.btnAdressen = New System.Windows.Forms.Button() - Me.btnAktiveVeredelung = New System.Windows.Forms.Button() - Me.btnPositionen = New System.Windows.Forms.Button() - Me.btnDV1 = New System.Windows.Forms.Button() - Me.Button5 = New System.Windows.Forms.Button() Me.pnl = New System.Windows.Forms.Panel() Me.Label6 = New System.Windows.Forms.Label() - Me.cboDakosyAction = New VERAG_PROG_ALLGEMEIN.MyComboBox() - Me.cboStammreferenz = New VERAG_PROG_ALLGEMEIN.MyComboBox() Me.Button1 = New System.Windows.Forms.Button() Me.Label4 = New System.Windows.Forms.Label() Me.Label5 = New System.Windows.Forms.Label() @@ -56,17 +47,27 @@ Partial Class usrCntlATLAS_EZA Me.DateiimportToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.DynamicAutomotiveXLSToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.GEZEXLSXToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.MEYLEXLSXToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.ToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() Me.EZAIDToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.MEYLEXLSXToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.FressnapToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.MyFlowLayoutPanel1 = New VERAG_PROG_ALLGEMEIN.MyFlowLayoutPanel(Me.components) + Me.btnAllgemein = New System.Windows.Forms.Button() + Me.btnAdressen = New System.Windows.Forms.Button() + Me.btnAktiveVeredelung = New System.Windows.Forms.Button() + Me.btnPositionen = New System.Windows.Forms.Button() + Me.btnDV1 = New System.Windows.Forms.Button() + Me.Button5 = New System.Windows.Forms.Button() + Me.cboDakosyAction = New VERAG_PROG_ALLGEMEIN.MyComboBox() + Me.cboStammreferenz = New VERAG_PROG_ALLGEMEIN.MyComboBox() CType(Me.SplitContainer, System.ComponentModel.ISupportInitialize).BeginInit() Me.SplitContainer.Panel1.SuspendLayout() Me.SplitContainer.SuspendLayout() - Me.MyFlowLayoutPanel1.SuspendLayout() Me.pnl.SuspendLayout() Me.cntxtBezugsnr.SuspendLayout() Me.Panel1.SuspendLayout() Me.MenuStrip.SuspendLayout() + Me.MyFlowLayoutPanel1.SuspendLayout() Me.SuspendLayout() ' 'SplitContainer @@ -92,128 +93,6 @@ Partial Class usrCntlATLAS_EZA Me.SplitContainer.SplitterWidth = 1 Me.SplitContainer.TabIndex = 0 ' - 'MyFlowLayoutPanel1 - ' - Me.MyFlowLayoutPanel1.BackColor = System.Drawing.Color.WhiteSmoke - Me.MyFlowLayoutPanel1.Controls.Add(Me.btnAllgemein) - Me.MyFlowLayoutPanel1.Controls.Add(Me.btnAdressen) - Me.MyFlowLayoutPanel1.Controls.Add(Me.btnAktiveVeredelung) - Me.MyFlowLayoutPanel1.Controls.Add(Me.btnPositionen) - Me.MyFlowLayoutPanel1.Controls.Add(Me.btnDV1) - Me.MyFlowLayoutPanel1.Controls.Add(Me.Button5) - Me.MyFlowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill - Me.MyFlowLayoutPanel1.Location = New System.Drawing.Point(0, 0) - Me.MyFlowLayoutPanel1.Margin = New System.Windows.Forms.Padding(1) - Me.MyFlowLayoutPanel1.Name = "MyFlowLayoutPanel1" - Me.MyFlowLayoutPanel1.Size = New System.Drawing.Size(573, 72) - Me.MyFlowLayoutPanel1.TabIndex = 0 - ' - 'btnAllgemein - ' - Me.btnAllgemein.BackColor = System.Drawing.Color.SteelBlue - Me.btnAllgemein.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center - Me.btnAllgemein.FlatStyle = System.Windows.Forms.FlatStyle.Flat - Me.btnAllgemein.ForeColor = System.Drawing.SystemColors.ControlLightLight - Me.btnAllgemein.Image = Global.SDL.My.Resources.Resources.android_note12 - Me.btnAllgemein.ImageAlign = System.Drawing.ContentAlignment.TopCenter - Me.btnAllgemein.Location = New System.Drawing.Point(2, 2) - Me.btnAllgemein.Margin = New System.Windows.Forms.Padding(2) - Me.btnAllgemein.Name = "btnAllgemein" - Me.btnAllgemein.Padding = New System.Windows.Forms.Padding(0, 12, 0, 3) - Me.btnAllgemein.Size = New System.Drawing.Size(75, 67) - Me.btnAllgemein.TabIndex = 0 - Me.btnAllgemein.Text = "Allgemein" - Me.btnAllgemein.TextAlign = System.Drawing.ContentAlignment.BottomCenter - Me.btnAllgemein.UseVisualStyleBackColor = False - ' - 'btnAdressen - ' - Me.btnAdressen.BackColor = System.Drawing.Color.White - Me.btnAdressen.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center - Me.btnAdressen.FlatStyle = System.Windows.Forms.FlatStyle.Flat - Me.btnAdressen.Image = Global.SDL.My.Resources.Resources.house1 - Me.btnAdressen.ImageAlign = System.Drawing.ContentAlignment.TopCenter - Me.btnAdressen.Location = New System.Drawing.Point(81, 2) - Me.btnAdressen.Margin = New System.Windows.Forms.Padding(2) - Me.btnAdressen.Name = "btnAdressen" - Me.btnAdressen.Padding = New System.Windows.Forms.Padding(0, 0, 0, 3) - Me.btnAdressen.Size = New System.Drawing.Size(75, 67) - Me.btnAdressen.TabIndex = 1 - Me.btnAdressen.Text = "Adressen" - Me.btnAdressen.TextAlign = System.Drawing.ContentAlignment.BottomCenter - Me.btnAdressen.UseVisualStyleBackColor = False - ' - 'btnAktiveVeredelung - ' - Me.btnAktiveVeredelung.BackColor = System.Drawing.Color.White - Me.btnAktiveVeredelung.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center - Me.btnAktiveVeredelung.FlatStyle = System.Windows.Forms.FlatStyle.Flat - Me.btnAktiveVeredelung.Image = Global.SDL.My.Resources.Resources.aktiveVeredelung1 - Me.btnAktiveVeredelung.ImageAlign = System.Drawing.ContentAlignment.TopCenter - Me.btnAktiveVeredelung.Location = New System.Drawing.Point(160, 2) - Me.btnAktiveVeredelung.Margin = New System.Windows.Forms.Padding(2) - Me.btnAktiveVeredelung.Name = "btnAktiveVeredelung" - Me.btnAktiveVeredelung.Padding = New System.Windows.Forms.Padding(0, 6, 0, 3) - Me.btnAktiveVeredelung.Size = New System.Drawing.Size(94, 67) - Me.btnAktiveVeredelung.TabIndex = 3 - Me.btnAktiveVeredelung.Text = "Pass. Veredel." - Me.btnAktiveVeredelung.TextAlign = System.Drawing.ContentAlignment.BottomCenter - Me.btnAktiveVeredelung.UseVisualStyleBackColor = False - Me.btnAktiveVeredelung.Visible = False - ' - 'btnPositionen - ' - Me.btnPositionen.BackColor = System.Drawing.Color.White - Me.btnPositionen.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center - Me.btnPositionen.FlatStyle = System.Windows.Forms.FlatStyle.Flat - Me.btnPositionen.Image = Global.SDL.My.Resources.Resources.list_new_small2 - Me.btnPositionen.ImageAlign = System.Drawing.ContentAlignment.TopCenter - Me.btnPositionen.Location = New System.Drawing.Point(258, 2) - Me.btnPositionen.Margin = New System.Windows.Forms.Padding(2) - Me.btnPositionen.Name = "btnPositionen" - Me.btnPositionen.Padding = New System.Windows.Forms.Padding(0, 0, 0, 3) - Me.btnPositionen.Size = New System.Drawing.Size(81, 67) - Me.btnPositionen.TabIndex = 4 - Me.btnPositionen.Text = "Positionen" - Me.btnPositionen.TextAlign = System.Drawing.ContentAlignment.BottomCenter - Me.btnPositionen.UseVisualStyleBackColor = False - ' - 'btnDV1 - ' - Me.btnDV1.BackColor = System.Drawing.Color.White - Me.btnDV1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center - Me.btnDV1.FlatStyle = System.Windows.Forms.FlatStyle.Flat - Me.btnDV1.Image = Global.SDL.My.Resources.Resources.moneybag1 - Me.btnDV1.ImageAlign = System.Drawing.ContentAlignment.TopCenter - Me.btnDV1.Location = New System.Drawing.Point(343, 2) - Me.btnDV1.Margin = New System.Windows.Forms.Padding(2) - Me.btnDV1.Name = "btnDV1" - Me.btnDV1.Padding = New System.Windows.Forms.Padding(0, 2, 0, 3) - Me.btnDV1.Size = New System.Drawing.Size(94, 67) - Me.btnDV1.TabIndex = 6 - Me.btnDV1.Text = "D.V.1" - Me.btnDV1.TextAlign = System.Drawing.ContentAlignment.BottomCenter - Me.btnDV1.UseVisualStyleBackColor = False - Me.btnDV1.Visible = False - ' - 'Button5 - ' - Me.Button5.BackColor = System.Drawing.Color.White - Me.Button5.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center - Me.Button5.FlatStyle = System.Windows.Forms.FlatStyle.Flat - Me.Button5.Image = Global.SDL.My.Resources.Resources.android_note12 - Me.Button5.ImageAlign = System.Drawing.ContentAlignment.TopCenter - Me.Button5.Location = New System.Drawing.Point(441, 2) - Me.Button5.Margin = New System.Windows.Forms.Padding(2) - Me.Button5.Name = "Button5" - Me.Button5.Padding = New System.Windows.Forms.Padding(0, 12, 0, 3) - Me.Button5.Size = New System.Drawing.Size(81, 67) - Me.Button5.TabIndex = 5 - Me.Button5.Text = "Referenzen" - Me.Button5.TextAlign = System.Drawing.ContentAlignment.BottomCenter - Me.Button5.UseVisualStyleBackColor = False - Me.Button5.Visible = False - ' 'pnl ' Me.pnl.BackColor = System.Drawing.Color.WhiteSmoke @@ -242,35 +121,6 @@ Partial Class usrCntlATLAS_EZA Me.Label6.Text = "Stammref.:" Me.Label6.TextAlign = System.Drawing.ContentAlignment.TopRight ' - 'cboDakosyAction - ' - Me.cboDakosyAction._allowedValuesFreiText = Nothing - Me.cboDakosyAction._allowFreiText = False - Me.cboDakosyAction._value = "" - Me.cboDakosyAction.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.cboDakosyAction.BackColor = System.Drawing.Color.FromArgb(CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer)) - Me.cboDakosyAction.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cboDakosyAction.FlatStyle = System.Windows.Forms.FlatStyle.Flat - Me.cboDakosyAction.FormattingEnabled = True - Me.cboDakosyAction.Location = New System.Drawing.Point(200, 48) - Me.cboDakosyAction.Name = "cboDakosyAction" - Me.cboDakosyAction.Size = New System.Drawing.Size(158, 21) - Me.cboDakosyAction.TabIndex = 1 - ' - 'cboStammreferenz - ' - Me.cboStammreferenz._allowedValuesFreiText = Nothing - Me.cboStammreferenz._allowFreiText = True - Me.cboStammreferenz._value = "" - Me.cboStammreferenz.BackColor = System.Drawing.Color.FromArgb(CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer)) - Me.cboStammreferenz.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cboStammreferenz.FlatStyle = System.Windows.Forms.FlatStyle.Flat - Me.cboStammreferenz.FormattingEnabled = True - Me.cboStammreferenz.Location = New System.Drawing.Point(71, 48) - Me.cboStammreferenz.Name = "cboStammreferenz" - Me.cboStammreferenz.Size = New System.Drawing.Size(129, 21) - Me.cboStammreferenz.TabIndex = 13 - ' 'Button1 ' Me.Button1.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) @@ -445,7 +295,7 @@ Partial Class usrCntlATLAS_EZA ' 'DateiimportToolStripMenuItem ' - Me.DateiimportToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.DynamicAutomotiveXLSToolStripMenuItem, Me.GEZEXLSXToolStripMenuItem, Me.MEYLEXLSXToolStripMenuItem}) + Me.DateiimportToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.DynamicAutomotiveXLSToolStripMenuItem, Me.GEZEXLSXToolStripMenuItem, Me.MEYLEXLSXToolStripMenuItem, Me.FressnapToolStripMenuItem}) Me.DateiimportToolStripMenuItem.Name = "DateiimportToolStripMenuItem" Me.DateiimportToolStripMenuItem.Size = New System.Drawing.Size(87, 20) Me.DateiimportToolStripMenuItem.Text = "Datei-Import" @@ -462,6 +312,12 @@ Partial Class usrCntlATLAS_EZA Me.GEZEXLSXToolStripMenuItem.Size = New System.Drawing.Size(224, 22) Me.GEZEXLSXToolStripMenuItem.Text = "GEZE (XLSX)" ' + 'MEYLEXLSXToolStripMenuItem + ' + Me.MEYLEXLSXToolStripMenuItem.Name = "MEYLEXLSXToolStripMenuItem" + Me.MEYLEXLSXToolStripMenuItem.Size = New System.Drawing.Size(224, 22) + Me.MEYLEXLSXToolStripMenuItem.Text = "MEYLE (XLSX)" + ' 'ToolStripMenuItem1 ' Me.ToolStripMenuItem1.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.EZAIDToolStripMenuItem}) @@ -475,11 +331,162 @@ Partial Class usrCntlATLAS_EZA Me.EZAIDToolStripMenuItem.Size = New System.Drawing.Size(109, 22) Me.EZAIDToolStripMenuItem.Text = "EZA ID" ' - 'MEYLEXLSXToolStripMenuItem + 'FressnapToolStripMenuItem ' - Me.MEYLEXLSXToolStripMenuItem.Name = "MEYLEXLSXToolStripMenuItem" - Me.MEYLEXLSXToolStripMenuItem.Size = New System.Drawing.Size(224, 22) - Me.MEYLEXLSXToolStripMenuItem.Text = "MEYLE (XLSX)" + Me.FressnapToolStripMenuItem.Name = "FressnapToolStripMenuItem" + Me.FressnapToolStripMenuItem.Size = New System.Drawing.Size(224, 22) + Me.FressnapToolStripMenuItem.Text = "Fressnapf (XLSX)" + ' + 'MyFlowLayoutPanel1 + ' + Me.MyFlowLayoutPanel1.BackColor = System.Drawing.Color.WhiteSmoke + Me.MyFlowLayoutPanel1.Controls.Add(Me.btnAllgemein) + Me.MyFlowLayoutPanel1.Controls.Add(Me.btnAdressen) + Me.MyFlowLayoutPanel1.Controls.Add(Me.btnAktiveVeredelung) + Me.MyFlowLayoutPanel1.Controls.Add(Me.btnPositionen) + Me.MyFlowLayoutPanel1.Controls.Add(Me.btnDV1) + Me.MyFlowLayoutPanel1.Controls.Add(Me.Button5) + Me.MyFlowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill + Me.MyFlowLayoutPanel1.Location = New System.Drawing.Point(0, 0) + Me.MyFlowLayoutPanel1.Margin = New System.Windows.Forms.Padding(1) + Me.MyFlowLayoutPanel1.Name = "MyFlowLayoutPanel1" + Me.MyFlowLayoutPanel1.Size = New System.Drawing.Size(573, 72) + Me.MyFlowLayoutPanel1.TabIndex = 0 + ' + 'btnAllgemein + ' + Me.btnAllgemein.BackColor = System.Drawing.Color.SteelBlue + Me.btnAllgemein.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center + Me.btnAllgemein.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.btnAllgemein.ForeColor = System.Drawing.SystemColors.ControlLightLight + Me.btnAllgemein.Image = Global.SDL.My.Resources.Resources.android_note12 + Me.btnAllgemein.ImageAlign = System.Drawing.ContentAlignment.TopCenter + Me.btnAllgemein.Location = New System.Drawing.Point(2, 2) + Me.btnAllgemein.Margin = New System.Windows.Forms.Padding(2) + Me.btnAllgemein.Name = "btnAllgemein" + Me.btnAllgemein.Padding = New System.Windows.Forms.Padding(0, 12, 0, 3) + Me.btnAllgemein.Size = New System.Drawing.Size(75, 67) + Me.btnAllgemein.TabIndex = 0 + Me.btnAllgemein.Text = "Allgemein" + Me.btnAllgemein.TextAlign = System.Drawing.ContentAlignment.BottomCenter + Me.btnAllgemein.UseVisualStyleBackColor = False + ' + 'btnAdressen + ' + Me.btnAdressen.BackColor = System.Drawing.Color.White + Me.btnAdressen.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center + Me.btnAdressen.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.btnAdressen.Image = Global.SDL.My.Resources.Resources.house1 + Me.btnAdressen.ImageAlign = System.Drawing.ContentAlignment.TopCenter + Me.btnAdressen.Location = New System.Drawing.Point(81, 2) + Me.btnAdressen.Margin = New System.Windows.Forms.Padding(2) + Me.btnAdressen.Name = "btnAdressen" + Me.btnAdressen.Padding = New System.Windows.Forms.Padding(0, 0, 0, 3) + Me.btnAdressen.Size = New System.Drawing.Size(75, 67) + Me.btnAdressen.TabIndex = 1 + Me.btnAdressen.Text = "Adressen" + Me.btnAdressen.TextAlign = System.Drawing.ContentAlignment.BottomCenter + Me.btnAdressen.UseVisualStyleBackColor = False + ' + 'btnAktiveVeredelung + ' + Me.btnAktiveVeredelung.BackColor = System.Drawing.Color.White + Me.btnAktiveVeredelung.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center + Me.btnAktiveVeredelung.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.btnAktiveVeredelung.Image = Global.SDL.My.Resources.Resources.aktiveVeredelung1 + Me.btnAktiveVeredelung.ImageAlign = System.Drawing.ContentAlignment.TopCenter + Me.btnAktiveVeredelung.Location = New System.Drawing.Point(160, 2) + Me.btnAktiveVeredelung.Margin = New System.Windows.Forms.Padding(2) + Me.btnAktiveVeredelung.Name = "btnAktiveVeredelung" + Me.btnAktiveVeredelung.Padding = New System.Windows.Forms.Padding(0, 6, 0, 3) + Me.btnAktiveVeredelung.Size = New System.Drawing.Size(94, 67) + Me.btnAktiveVeredelung.TabIndex = 3 + Me.btnAktiveVeredelung.Text = "Pass. Veredel." + Me.btnAktiveVeredelung.TextAlign = System.Drawing.ContentAlignment.BottomCenter + Me.btnAktiveVeredelung.UseVisualStyleBackColor = False + Me.btnAktiveVeredelung.Visible = False + ' + 'btnPositionen + ' + Me.btnPositionen.BackColor = System.Drawing.Color.White + Me.btnPositionen.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center + Me.btnPositionen.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.btnPositionen.Image = Global.SDL.My.Resources.Resources.list_new_small2 + Me.btnPositionen.ImageAlign = System.Drawing.ContentAlignment.TopCenter + Me.btnPositionen.Location = New System.Drawing.Point(258, 2) + Me.btnPositionen.Margin = New System.Windows.Forms.Padding(2) + Me.btnPositionen.Name = "btnPositionen" + Me.btnPositionen.Padding = New System.Windows.Forms.Padding(0, 0, 0, 3) + Me.btnPositionen.Size = New System.Drawing.Size(81, 67) + Me.btnPositionen.TabIndex = 4 + Me.btnPositionen.Text = "Positionen" + Me.btnPositionen.TextAlign = System.Drawing.ContentAlignment.BottomCenter + Me.btnPositionen.UseVisualStyleBackColor = False + ' + 'btnDV1 + ' + Me.btnDV1.BackColor = System.Drawing.Color.White + Me.btnDV1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center + Me.btnDV1.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.btnDV1.Image = Global.SDL.My.Resources.Resources.moneybag1 + Me.btnDV1.ImageAlign = System.Drawing.ContentAlignment.TopCenter + Me.btnDV1.Location = New System.Drawing.Point(343, 2) + Me.btnDV1.Margin = New System.Windows.Forms.Padding(2) + Me.btnDV1.Name = "btnDV1" + Me.btnDV1.Padding = New System.Windows.Forms.Padding(0, 2, 0, 3) + Me.btnDV1.Size = New System.Drawing.Size(94, 67) + Me.btnDV1.TabIndex = 6 + Me.btnDV1.Text = "D.V.1" + Me.btnDV1.TextAlign = System.Drawing.ContentAlignment.BottomCenter + Me.btnDV1.UseVisualStyleBackColor = False + Me.btnDV1.Visible = False + ' + 'Button5 + ' + Me.Button5.BackColor = System.Drawing.Color.White + Me.Button5.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center + Me.Button5.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.Button5.Image = Global.SDL.My.Resources.Resources.android_note12 + Me.Button5.ImageAlign = System.Drawing.ContentAlignment.TopCenter + Me.Button5.Location = New System.Drawing.Point(441, 2) + Me.Button5.Margin = New System.Windows.Forms.Padding(2) + Me.Button5.Name = "Button5" + Me.Button5.Padding = New System.Windows.Forms.Padding(0, 12, 0, 3) + Me.Button5.Size = New System.Drawing.Size(81, 67) + Me.Button5.TabIndex = 5 + Me.Button5.Text = "Referenzen" + Me.Button5.TextAlign = System.Drawing.ContentAlignment.BottomCenter + Me.Button5.UseVisualStyleBackColor = False + Me.Button5.Visible = False + ' + 'cboDakosyAction + ' + Me.cboDakosyAction._allowedValuesFreiText = Nothing + Me.cboDakosyAction._allowFreiText = False + Me.cboDakosyAction._value = "" + Me.cboDakosyAction.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.cboDakosyAction.BackColor = System.Drawing.Color.FromArgb(CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer)) + Me.cboDakosyAction.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cboDakosyAction.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.cboDakosyAction.FormattingEnabled = True + Me.cboDakosyAction.Location = New System.Drawing.Point(200, 48) + Me.cboDakosyAction.Name = "cboDakosyAction" + Me.cboDakosyAction.Size = New System.Drawing.Size(158, 21) + Me.cboDakosyAction.TabIndex = 1 + ' + 'cboStammreferenz + ' + Me.cboStammreferenz._allowedValuesFreiText = Nothing + Me.cboStammreferenz._allowFreiText = True + Me.cboStammreferenz._value = "" + Me.cboStammreferenz.BackColor = System.Drawing.Color.FromArgb(CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer), CType(CType(224, Byte), Integer)) + Me.cboStammreferenz.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cboStammreferenz.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.cboStammreferenz.FormattingEnabled = True + Me.cboStammreferenz.Location = New System.Drawing.Point(71, 48) + Me.cboStammreferenz.Name = "cboStammreferenz" + Me.cboStammreferenz.Size = New System.Drawing.Size(129, 21) + Me.cboStammreferenz.TabIndex = 13 ' 'usrCntlATLAS_EZA ' @@ -493,7 +500,6 @@ Partial Class usrCntlATLAS_EZA Me.SplitContainer.Panel1.ResumeLayout(False) CType(Me.SplitContainer, System.ComponentModel.ISupportInitialize).EndInit() Me.SplitContainer.ResumeLayout(False) - Me.MyFlowLayoutPanel1.ResumeLayout(False) Me.pnl.ResumeLayout(False) Me.pnl.PerformLayout() Me.cntxtBezugsnr.ResumeLayout(False) @@ -501,6 +507,7 @@ Partial Class usrCntlATLAS_EZA Me.Panel1.PerformLayout() Me.MenuStrip.ResumeLayout(False) Me.MenuStrip.PerformLayout() + Me.MyFlowLayoutPanel1.ResumeLayout(False) Me.ResumeLayout(False) End Sub @@ -540,4 +547,5 @@ Partial Class usrCntlATLAS_EZA Friend WithEvents XMLExampleToolStripMenuItem As ToolStripMenuItem Friend WithEvents GEZEXLSXToolStripMenuItem As ToolStripMenuItem Friend WithEvents MEYLEXLSXToolStripMenuItem As ToolStripMenuItem + Friend WithEvents FressnapToolStripMenuItem As ToolStripMenuItem End Class diff --git a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.vb b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.vb index 1475f9a7..ec4b8681 100644 --- a/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.vb +++ b/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EZA/usrCntlATLAS_EZA.vb @@ -1428,24 +1428,7 @@ Public Class usrCntlATLAS_EZA End Function - Private Function ToDoubleSafe(o As Object) As Double - If o Is Nothing OrElse IsDBNull(o) Then Return 0 - ' Direkte Numerik - If TypeOf o Is Double Then Return DirectCast(o, Double) - If TypeOf o Is Decimal Then Return Convert.ToDouble(o) - If TypeOf o Is Integer OrElse TypeOf o Is Int64 OrElse TypeOf o Is Int16 Then Return Convert.ToDouble(o) - - ' String-Fälle (leer, deutsch, englisch) - Dim s = o.ToString().Trim() - If s = "" Then Return 0 - - Dim v As Double - If Double.TryParse(s, NumberStyles.Any, CultureInfo.CurrentCulture, v) Then Return v - If Double.TryParse(s, NumberStyles.Any, CultureInfo.InvariantCulture, v) Then Return v - - Return 0 ' Notfalls 0 - End Function Private Sub pnl_Paint_1(sender As Object, e As PaintEventArgs) Handles pnl.Paint @@ -1497,5 +1480,309 @@ Public Class usrCntlATLAS_EZA Private Sub MEYLEXLSXToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles MEYLEXLSXToolStripMenuItem.Click importExcel_MEYLE() End Sub + + Private Sub FressnapToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles FressnapToolStripMenuItem.Click + + importExcel_Fressnapf() + End Sub + + Private Function importExcel_Fressnapf() As Boolean + Dim fd As New OpenFileDialog With { + .Filter = "Excel Dateien|*.xls;*.xlsx", + .Multiselect = True, + .Title = "Bitte eine oder mehrere Excel-Dateien auswählen" + } + + If fd.ShowDialog() <> DialogResult.OK Then + Me.Cursor = Cursors.Default + MsgBox("Keine Datei ausgewählt!") + Return False + End If + + Dim cnt As Integer = 0 + + If EZA.eza_WARENPOS.Count > 0 Then + If vbYes = MsgBox("Sollten die aktuellen Einträge gelöscht werden?", vbYesNo) Then + EZA.eza_WARENPOS.Clear() + End If + End If + + Me.Cursor = Cursors.WaitCursor + + For Each filePath As String In fd.FileNames + If Not (filePath.ToLower().EndsWith(".xls") OrElse filePath.ToLower().EndsWith(".xlsx")) Then + Continue For + End If + + Dim exclApp As Excel.Application = Nothing + Dim Datei As Excel.Workbook = Nothing + Dim Blatt As Excel.Worksheet = Nothing + + Try + exclApp = New Excel.Application With { + .CutCopyMode = False, + .DisplayAlerts = False + } + + Datei = exclApp.Workbooks.Open(filePath) + Blatt = CType(Datei.Worksheets(1), Excel.Worksheet) + Datei.Activate() + + Try : Blatt.ShowAllData() : Catch : End Try + + ' --- Prüfe, ob Kopfzeile in Zeile 17 existiert + If Not checkExcelHeader_Fressnapf(Blatt) Then + Throw New ApplicationException("Excel-Struktur entspricht nicht dem erwarteten Layout (Header-Zeile 17).") + End If + + ' --- Spalten dynamisch per Header ermitteln (Zeile 17) + Dim colDesc = FindHeaderColumn(Blatt, 17, {"warenbeschreibung"}) + Dim colImpCode = FindHeaderColumn(Blatt, 17, {"importcodenummer", "warentarifnummer", "eztnummer", "ezt-nummer"}) + Dim colOrigin = FindHeaderColumn(Blatt, 17, {"ursprungsland", "ursprungslandcode"}) + Dim colCurrency = FindHeaderColumn(Blatt, 17, {"währung", "waehrung", "currency"}) + Dim colNetMass = FindHeaderColumn(Blatt, 17, {"nettomasse", "nettomas­se", "nettomasse kg", "eigenmasse"}) + Dim colQty = FindHeaderColumn(Blatt, 17, {"menge", "quantity", "qty"}) + Dim colValue = FindHeaderColumn(Blatt, 17, {"warenwert", "invoice value", "value"}) + + ' Minimal erforderliche Spalten prüfen + If colDesc = -1 OrElse colImpCode = -1 OrElse colOrigin = -1 OrElse colCurrency = -1 OrElse colValue = -1 Then + Throw New ApplicationException("Nicht alle erforderlichen Spaltenköpfe gefunden (Beschreibung/Warentarifnummer/Ursprungsland/Währung/Warenwert).") + End If + + ' --- Datenbereich bestimmen: ab Zeile 18 bis erste Leerzeile in Spalte A (Pos.) + Dim startRows As Integer = 18 + Dim endRows As Integer = startRows + Dim usedRows As Integer = Blatt.UsedRange.Rows.Count + + Do While endRows <= usedRows + Dim val = Blatt.Range("A" & endRows).Value + If val Is Nothing OrElse val.ToString().Trim() = "" Then Exit Do + endRows += 1 + Loop + endRows -= 1 + + If endRows < startRows Then + Throw New ApplicationException("Keine Positionsdaten im Excel gefunden.") + End If + + ' --- Spaltenanzahl mindestens so groß wie letzte genutzte Spalte + Dim colCount As Integer = Math.Max(Blatt.UsedRange.Columns.Count, Math.Max(Math.Max(Math.Max(colDesc, colImpCode), Math.Max(colOrigin, colCurrency)), Math.Max(colValue, If(colNetMass < 0, 0, colNetMass))) + 1) + If colCount < 19 Then colCount = 19 ' typischerweise A..S + + ' --- Rohdaten in DataTable übernehmen + Dim DATA As New DataTable() + For c As Integer = 1 To colCount + DATA.Columns.Add("Spalte" & c, GetType(String)) + Next + + For r As Integer = startRows To endRows + Dim newRow As DataRow = DATA.NewRow() + For c As Integer = 1 To colCount + Dim value = Blatt.Cells(r, c).Value + newRow(c - 1) = If(value IsNot Nothing, value.ToString(), "") + Next + ' Normalisierung für Gruppierung + If colCurrency >= 0 Then newRow(colCurrency) = newRow(colCurrency).ToString().Trim().ToUpper() + If colOrigin >= 0 Then newRow(colOrigin) = newRow(colOrigin).ToString().Trim().ToUpper() + DATA.Rows.Add(newRow) + Next + + ' --- Nur numerische Pos.-Zeilen behalten (Spalte A / Index 0) + For i As Integer = DATA.Rows.Count - 1 To 0 Step -1 + Dim posTxt As String = DATA.Rows(i)(0).ToString().Trim() + Dim posNum As Integer + If Not Integer.TryParse(posTxt, posNum) Then + DATA.Rows.RemoveAt(i) + End If + Next + + ' --- Gruppieren nach: Beschreibung, Warentarifnummer, Ursprungsland, Währung + Dim resultDATA As DataTable = DATA.Clone() + + Dim groups = From row In DATA.AsEnumerable() + Group row By + keyDesc = row(colDesc), + keyTariff = row(colImpCode), + keyOrigin = row(colOrigin), + keyCurr = row(colCurrency) + Into grp = Group + Select keyDesc, keyTariff, keyOrigin, keyCurr, grp + + For Each g In groups + Dim newRow As DataRow = resultDATA.NewRow() + + newRow(colDesc) = g.keyDesc + newRow(colImpCode) = g.keyTariff + newRow(colOrigin) = g.keyOrigin + newRow(colCurrency) = g.keyCurr + + ' Summenfelder (nur wenn vorhanden) + If colQty >= 0 Then newRow(colQty) = g.grp.Sum(Function(r) ToDoubleSafe(r(colQty))).ToString() + If colNetMass >= 0 Then newRow(colNetMass) = g.grp.Sum(Function(r) ToDoubleSafe(r(colNetMass))).ToString() + newRow(colValue) = g.grp.Sum(Function(r) ToDoubleSafe(r(colValue))).ToString() + + resultDATA.Rows.Add(newRow) + Next + + ' --- Kopfwerte optional (z. B. Belegnummer) + Dim HandlesRgNr As String = "" + Try + If Blatt.Range("A8") IsNot Nothing AndAlso Blatt.Range("A8").Value IsNot Nothing Then + HandlesRgNr = Blatt.Range("A8").Value.ToString().Trim() + End If + Catch + End Try + + ' --- Ergebniszeilen in EZA schreiben + For Each row As DataRow In resultDATA.Rows + Dim tariff As String = row(colImpCode).ToString().Trim() + Dim desc As String = row(colDesc).ToString().Trim() + If tariff = "" AndAlso desc = "" Then Continue For + + Dim POSITION As New DAKOSY_Worker.cDakosy_EZA_Warenposition + + ' *** WAREN­TARIFNUMMER *** + POSITION.ezaWP_WarennummerEZT = tariff + + ' Packstücke (nicht aus Excel, Standardwerte) + POSITION.ezaWP_PackstueckAnzahl = "0" + POSITION.ezaWP_PackstueckArt = "PK" + + ' *** ARTIKELPREIS (Warenwert) *** + Dim warenwert As Double = ToDoubleSafe(row(colValue)) + POSITION.ezaWP_Artikelpreis = warenwert.ToString("N2") + + ' *** WÄHRUNG *** + POSITION.ezaWP_ArtikelpreisWaehrung = row(colCurrency).ToString() + + ' *** BESCHREIBUNG *** + POSITION.ezaWP_Warenbezeichnung = desc + + ' *** EIGENMASSE (aus Nettomasse, wenn vorhanden) *** + If colNetMass >= 0 Then + Dim netto As Double = ToDoubleSafe(row(colNetMass)) + POSITION.ezaWP_Eigenmasse = netto.ToString("N1") + Else + POSITION.ezaWP_Eigenmasse = "0.0" + End If + + ' *** URSPRUNGS­LAND (2-stellig) *** + Dim ursprung As String = row(colOrigin).ToString().Trim().ToUpper() + If ursprung.Length >= 2 Then POSITION.ezaWP_UrsprungslandCode = ursprung.Substring(0, 2) + + ' Unterlagen (optional) + If Not String.IsNullOrWhiteSpace(HandlesRgNr) Then + POSITION.ezaWP_UNTERLAGEN.Add(New DAKOSY_Worker.cDakosy_EZA_WarenpositionVorgelegteUnterlagen With { + .ezaWpUl_Art = "N380", + .ezaWpUl_Bereich = "4", + .ezaWpUl_VorlageKz = "J", + .ezaWpUl_Nummer = HandlesRgNr, + .ezaWpUl_DatumAusstellung = Nothing + }) + End If + + EZA.eza_WARENPOS.Add(POSITION) + cnt += 1 + Next + + Catch ex As Exception + Me.Cursor = Cursors.Default + MsgBox("FEHLER beim Einlesen: " & vbCrLf & ex.Message) + Finally + ' Ressourcen sauber freigeben + Try + If Datei IsNot Nothing Then Datei.Close(False) + Catch + End Try + Try + If exclApp IsNot Nothing Then exclApp.Quit() + Catch + End Try + Try + If Blatt IsNot Nothing Then System.Runtime.InteropServices.Marshal.FinalReleaseComObject(Blatt) + Catch + End Try + Try + If Datei IsNot Nothing Then System.Runtime.InteropServices.Marshal.FinalReleaseComObject(Datei) + Catch + End Try + Try + If exclApp IsNot Nothing Then System.Runtime.InteropServices.Marshal.FinalReleaseComObject(exclApp) + Catch + End Try + Blatt = Nothing : Datei = Nothing : exclApp = Nothing + GC.Collect() + GC.WaitForPendingFinalizers() + End Try + + Console.WriteLine("Verarbeite Datei: " & filePath) + Next + + Me.FindForm.SuspendLayout() + POSITIONEN.setValues(EZA, True) + btnPositionen.PerformClick() + Me.FindForm.ResumeLayout() + + MsgBox(cnt & " Datensätze wurden eingelesen.") + Me.Cursor = Cursors.Default + Return True + End Function + + ' Liefert die 0-basierte Spaltennummer (DataTable-Index) anhand eines Header-Texts in rowIdx. + ' Gibt -1 zurück, wenn keine der gesuchten Varianten gefunden wird. + Private Function FindHeaderColumn(ws As Excel.Worksheet, rowIdx As Integer, headerVariants As IEnumerable(Of String)) As Integer + Dim maxScanCols As Integer = 35 ' etwas Puffer + For c As Integer = 1 To maxScanCols + Dim cell = ws.Cells(rowIdx, c).Value + If cell Is Nothing Then Continue For + Dim norm = cell.ToString().Trim().ToLower() + For Each hv In headerVariants + If norm.Contains(hv.ToLower()) Then + Return c - 1 ' DataTable ist 0-basiert + End If + Next + Next + Return -1 + End Function + + Private Function ToDoubleSafe(obj As Object) As Double + If obj Is Nothing Then Return 0 + Dim s As String = obj.ToString().Trim() + If s = "" Then Return 0 + ' Komma/Punkt robust behandeln, kulturinvariant parsen + Dim d As Double + ' Erst alle Tausenderpunkte/Kommas vereinheitlichen + s = s.Replace(" ", "") + ' Häufigster Fall: deutsches Komma + If s.Contains(",") AndAlso Not s.Contains(".") Then + s = s.Replace(".", "") + s = s.Replace(",", ".") + ElseIf s.Contains(".") AndAlso s.Contains(",") Then + ' Entferne Tausender-Trenner, behalte Dezimaltrennzeichen als Punkt + s = s.Replace(".", "") + s = s.Replace(",", ".") + End If + If Double.TryParse(s, Globalization.NumberStyles.Any, Globalization.CultureInfo.InvariantCulture, d) Then + Return d + End If + Return 0 + End Function + + ' Prüft Kopfzeile in Zeile 17: + ' A17="Pos.", D17 beginnt mit "Warenbeschreibung", + ' P17 beginnt mit "Importcodenummer", R17 beginnt mit "Ursprungsland" + Private Function checkExcelHeader_Fressnapf(ws As Excel.Worksheet) As Boolean + Try + Dim a = CStr(ws.Range("A17").Value) + Dim d = CStr(ws.Range("D17").Value) + If a Is Nothing OrElse d Is Nothing Then Return False + Return a.Trim().ToLower() = "pos." AndAlso + d.Trim().ToLower().StartsWith("warenbeschreibung") + Catch + Return False + End Try + End Function + + End Class diff --git a/VERAG_PROG_ALLGEMEIN/AuditFlow/Classes/cAuditFlow.vb b/VERAG_PROG_ALLGEMEIN/AuditFlow/Classes/cAuditFlow.vb index 67662905..9efec880 100644 --- a/VERAG_PROG_ALLGEMEIN/AuditFlow/Classes/cAuditFlow.vb +++ b/VERAG_PROG_ALLGEMEIN/AuditFlow/Classes/cAuditFlow.vb @@ -160,7 +160,7 @@ Public Class cAuditFlow pruefung.wartPruef_Erledigung_Datum = Date.Now pruefung.wartPruef_Erledigung = True pruefung.wartPruef_Anhaenge_daId = dsId - pruefung.wartPruef_Bemerkung = dsId + pruefung.wartPruef_Bemerkung = Bemerkung ' 3. Speichern Return pruefung.SAVE() diff --git a/VERAG_PROG_ALLGEMEIN/Schnittstellen/DHF/cDHF_Import.vb b/VERAG_PROG_ALLGEMEIN/Schnittstellen/DHF/cDHF_Import.vb new file mode 100644 index 00000000..b9d9a16f --- /dev/null +++ b/VERAG_PROG_ALLGEMEIN/Schnittstellen/DHF/cDHF_Import.vb @@ -0,0 +1,729 @@ +Imports System.Data.SqlClient +Imports System.Reflection + + +' =========================================================== +' =============== KOPF (imDHFAnm) ====================== +' =========================================================== +Public Class cDHF_Import + ' ====== Primärschlüssel (zusammengesetzt) ====== + + Public LizenzNr As String = "S01122" + Public Property OperatorID As String + Public Property VorgangID As String + Public Property AnmID As String + Public Property Kennung As String + + ' ====== Datenfelder Kopf imDHFAnm (wie geliefert) ====== + Public Property DatenKomplett As Object + Public Property LRN As Object + Public Property TotPack As Object + Public Property TotGross As Object + Public Property Dest As Object + Public Property InMo As Object + Public Property BordMo As Object + Public Property DepIdnt As Object + Public Property DepNat As Object + Public Property CrossIdnt As Object + Public Property CrossIdntNat As Object + Public Property TermDelCd As Object + Public Property TermDelSit As Object + Public Property InvCurr As Object + Public Property InvVal As Object + Public Property ConeeTraNa As Object + Public Property ConeeTraStrt As Object + Public Property ConeeTraPst As Object + Public Property ConeeTraCty As Object + Public Property ConeeTraCtry As Object + Public Property ConeeTraFremdAdressID As Object + Public Property ExitCORef As Object + Public Property RechnungsNr As Object + Public Property RechnungsDatum As Object + Public Property DecTy As Object + Public Property Disp As Object + Public Property ArrLocAuth As Object + Public Property ContInd As Object + Public Property TransacCd As Object + Public Property ConorTraNa As Object + Public Property ConorTraStrt As Object + Public Property ConorTraPst As Object + Public Property ConorTraCty As Object + Public Property ConorTraCtry As Object + Public Property ConorTraFremdAdressID As Object + Public Property KzPool As Object + Public Property ConeeTraUIDCtry As Object + Public Property ConeeTraUID As Object + Public Property EntryCORef As Object + Public Property SendungsDatum As Object + Public Property PDTy As Object + Public Property DRef As Object + Public Property CInf As Object + Public Property Cat As Object + Public Property InfoText As Object + Public Property SendungsNr As Object + Public Property ConorTraUIDCtry As Object + Public Property ConorTraUID As Object + Public Property AnschreibeNr As Object + Public Property RIN As Object + Public Property KzAutomatik As Object + Public Property SecInd As Object + Public Property SpecCirc As Object + Public Property TransPayTy As Object + Public Property ComRef As Object + Public Property LodCoRef As Object + Public Property ResCd As Object + Public Property DLimit As Object + Public Property Route As Object + Public Property SNr As Object + Public Property KzEigenmassenaufteilung As Object + Public Property MusterName As Object + Public Property ConvRef As Object + Public Property ProArrDT As Object + Public Property LoadPlc As Object + Public Property UnloadPlcCd As Object + Public Property UnloadPlc As Object + Public Property FirEntryCoRef As Object + Public Property CarrTraNa As Object + Public Property CarrTraStrt As Object + Public Property CarrTraPst As Object + Public Property CarrTraCty As Object + Public Property CarrTraCtry As Object + Public Property CarrTraFremdAdressID As Object + Public Property NotifyTraNa As Object + Public Property NotifyTraStrt As Object + Public Property NotifyTraPst As Object + Public Property NotifyTraCty As Object + Public Property NotifyTraCtry As Object + Public Property NotifyTraFremdAdressID As Object + Public Property RepTraFremdAdressID As Object + Public Property SumDecTraFremdAdressID As Object + Public Property DecPlc As Object + Public Property DecDT As Object + Public Property RelationsID As Object + Public Property SSt_LizenzNr As Object + Public Property SSt_ID As Object + Public Property SSt_ArtID As Object + Public Property SSt_ProtokollKopfID As Object + Public Property KzPredeclaration As Object + Public Property AccDT As Object + Public Property PayTy As Object + Public Property DepoCd As Object + Public Property WarTy As Object + Public Property WarCtry As Object + Public Property War As Object + Public Property ZLID As Object + Public Property TermDelCtry As Object + Public Property TermDelPlc As Object + + ' ====== Navigation / Unterobjekte ====== + Public Property GdsItems As New List(Of cDHF_Import_GdsItem) + + Private Const TBL As String = "imDHFAnm" + Private ReadOnly SQL As New SQL + + ' ---- Konstruktor (Leeres Objekt) ---- + Public Sub New() + End Sub + + ' ---- Konstruktor mit Schlüssel + Auto-Load ---- + Public Sub New(lizenzNr As String, operatorId As String, vorgangId As String, anmId As String, kennung As String) + Me.LizenzNr = lizenzNr : Me.OperatorID = operatorId : Me.VorgangID = vorgangId : Me.AnmID = anmId : Me.Kennung = kennung + Load() + End Sub + + ' ---- Parameterliste dynamisch erzeugen (PK markiert) ---- + Private Function GetVarList(Optional includePK As Boolean = True) As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) + Dim l As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) + + ' PK + If includePK Then + l.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("LizenzNr", LizenzNr, "LizenzNr", True)) + l.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("OperatorID", OperatorID, "OperatorID", True)) + l.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("VorgangID", VorgangID, "VorgangID", True)) + l.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("AnmID", AnmID, "AnmID", True)) + l.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Kennung", Kennung, "Kennung", True)) + End If + + ' Alle Felder (Non-PK) + Dim allProps = Me.GetType().GetProperties(BindingFlags.Public Or BindingFlags.Instance). + Where(Function(p) p.CanRead AndAlso p.CanWrite AndAlso p.Name <> NameOf(GdsItems)) + For Each p In allProps + If {"LizenzNr", "OperatorID", "VorgangID", "AnmID", "Kennung"}.Contains(p.Name) Then Continue For + l.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable(p.Name, p.GetValue(Me), p.Name, False)) + Next + Return l + End Function + + ' ---- Save: Upsert + Kinder in Transaktion ---- + Public Function Save() As Boolean + Using conn As SqlConnection = SQL.GetNewOpenConnectionFMZOLL() + Using tr = conn.BeginTransaction() + Try + ' Upsert Kopf + Dim vars = GetVarList(includePK:=True) + Dim wherePk = "WHERE [LizenzNr]=@LizenzNr AND [OperatorID]=@OperatorID AND [VorgangID]=@VorgangID AND [AnmID]=@AnmID AND [Kennung]=@Kennung" + Dim sqlCheck = $"IF EXISTS(SELECT 1 FROM [{TBL}] {wherePk}) BEGIN {_SqlDyn.BuildUpdateCmd(TBL, vars)} END ELSE BEGIN {_SqlDyn.BuildInsertCmd(TBL, vars)} END" + + Using cmd As New SqlCommand(sqlCheck, conn, tr) + _SqlDyn.AddParams(cmd, vars) + cmd.ExecuteNonQuery() + End Using + + ' Kinder neu schreiben: erst löschen, dann einfügen (vereinfachte Konsistenz) + DeleteChildren(conn, tr) + + ' Positionen + Unterpositionen schreiben + For Each it In GdsItems + it.LizenzNr = Me.LizenzNr + it.OperatorID = Me.OperatorID + it.VorgangID = Me.VorgangID + it.AnmID = Me.AnmID + it.Kennung = Me.Kennung + it.Save(conn, tr) + Next + + tr.Commit() + Return True + Catch ex As Exception + tr.Rollback() + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, MethodBase.GetCurrentMethod().Name) + Return False + End Try + End Using + End Using + End Function + + Private Sub DeleteChildren(conn As SqlConnection, tr As SqlTransaction) + ' Löscht alle abhängigen Einträge (DocCerts + Pack zuerst, dann GdsItems) + Dim pkWhere = "WHERE [LizenzNr]=@LizenzNr AND [OperatorID]=@OperatorID AND [VorgangID]=@VorgangID AND [AnmID]=@AnmID AND [Kennung]=@Kennung" + Dim delDoc = $"DELETE d FROM [imDHFAnmGdsItemDocCerts] d INNER JOIN [imDHFAnmGdsItem] i ON d.LizenzNr=i.LizenzNr AND d.OperatorID=i.OperatorID AND d.VorgangID=i.VorgangID AND d.AnmID=i.AnmID AND d.Kennung=i.Kennung AND d.GdsItemID=i.GdsItemID {pkWhere.Replace("WHERE", "WHERE i.")}" + Dim delPack = $"DELETE p FROM [imDHFAnmGdsItemPack] p INNER JOIN [imDHFAnmGdsItem] i ON p.LizenzNr=i.LizenzNr AND p.OperatorID=i.OperatorID AND p.VorgangID=i.VorgangID AND p.AnmID=i.AnmID AND p.Kennung=i.Kennung AND p.GdsItemID=i.GdsItemID {pkWhere.Replace("WHERE", "WHERE i.")}" + Dim delIt = $"DELETE FROM [imDHFAnmGdsItem] {pkWhere}" + + Dim pars As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) From { + New VERAG_PROG_ALLGEMEIN.SQLVariable("LizenzNr", LizenzNr, "LizenzNr", True), + New VERAG_PROG_ALLGEMEIN.SQLVariable("OperatorID", OperatorID, "OperatorID", True), + New VERAG_PROG_ALLGEMEIN.SQLVariable("VorgangID", VorgangID, "VorgangID", True), + New VERAG_PROG_ALLGEMEIN.SQLVariable("AnmID", AnmID, "AnmID", True), + New VERAG_PROG_ALLGEMEIN.SQLVariable("Kennung", Kennung, "Kennung", True) + } + + For Each s In {delDoc, delPack, delIt} + Using cmd As New SqlCommand(s, conn, tr) + _SqlDyn.AddParams(cmd, pars) + cmd.ExecuteNonQuery() + End Using + Next + End Sub + + ' ---- Load: Kopf + Kinder ---- + Public Sub Load() + Using conn As SqlConnection = SQL.GetNewOpenConnectionFMZOLL() + ' Kopf + Dim selectHead = $"SELECT * FROM [{TBL}] WHERE [LizenzNr]=@LizenzNr AND [OperatorID]=@OperatorID AND [VorgangID]=@VorgangID AND [AnmID]=@AnmID AND [Kennung]=@Kennung" + Using cmd As New SqlCommand(selectHead, conn) + cmd.Parameters.AddWithValue("@LizenzNr", LizenzNr) + cmd.Parameters.AddWithValue("@OperatorID", OperatorID) + cmd.Parameters.AddWithValue("@VorgangID", VorgangID) + cmd.Parameters.AddWithValue("@AnmID", AnmID) + cmd.Parameters.AddWithValue("@Kennung", Kennung) + Using dr = cmd.ExecuteReader() + If dr.Read() Then + _SqlDyn.DataReaderToObject(dr, Me, GetVarList(includePK:=False)) + End If + End Using + End Using + + ' Kinder laden + Me.GdsItems.Clear() + Dim selectIt = "SELECT * FROM [imDHFAnmGdsItem] WHERE [LizenzNr]=@LizenzNr AND [OperatorID]=@OperatorID AND [VorgangID]=@VorgangID AND [AnmID]=@AnmID AND [Kennung]=@Kennung ORDER BY ItNr" + Using cmd As New SqlCommand(selectIt, conn) + cmd.Parameters.AddWithValue("@LizenzNr", LizenzNr) + cmd.Parameters.AddWithValue("@OperatorID", OperatorID) + cmd.Parameters.AddWithValue("@VorgangID", VorgangID) + cmd.Parameters.AddWithValue("@AnmID", AnmID) + cmd.Parameters.AddWithValue("@Kennung", Kennung) + Using dr = cmd.ExecuteReader() + While dr.Read() + Dim it As New cDHF_Import_GdsItem() With { + .LizenzNr = dr("LizenzNr").ToString(), + .OperatorID = dr("OperatorID").ToString(), + .VorgangID = dr("VorgangID").ToString(), + .AnmID = dr("AnmID").ToString(), + .Kennung = dr("Kennung").ToString(), + .GdsItemID = dr("GdsItemID").ToString() + } + it.FillFromReader(dr) + GdsItems.Add(it) + End While + End Using + End Using + + ' Unterobjekte je Position laden + For Each it In GdsItems + it.LoadChildren(conn) + Next + End Using + End Sub +End Class + +' =========================================================== +' =============== POSITION (imDHFAnmGdsItem) =========== +' =========================================================== +Public Class cDHF_Import_GdsItem + ' ====== FK/PK-Teil (Kopfbezug + pos-ID) ====== + Public Property LizenzNr As String + Public Property OperatorID As String + Public Property VorgangID As String + Public Property AnmID As String + Public Property Kennung As String + Public Property GdsItemID As String + + ' ====== Positionsfelder ====== + Public Property ItNr As Object + Public Property ComCd As Object + Public Property GdsDes As Object + Public Property Gross As Object + Public Property Net As Object + Public Property ProcCd As Object + Public Property ProcAddCd As Object + Public Property ItVal As Object + Public Property Orig As Object + Public Property Pref As Object + Public Property Quota As Object + Public Property ValMet As Object + Public Property VATInd As Object + Public Property ArtikelCode As Object + Public Property InfoText As Object + Public Property ArtikelMenge As Object + Public Property ArtikelMengenEH As Object + Public Property RezOrt As Object + Public Property SNr As Object + Public Property ProcTxt As Object + Public Property ComplPer As Object + Public Property ProsYield As Object + Public Property SpecMod As Object + Public Property RecCd As Object + Public Property SurvCORef As Object + Public Property EndCORef As Object + Public Property ComRef As Object + Public Property UNDangCd As Object + Public Property GlobCd As Object + Public Property GlobPer As Object + Public Property CondCd As Object + Public Property TransPayTy As Object + Public Property ConorTraNa As Object + Public Property ConorTraStrt As Object + Public Property ConorTraPst As Object + Public Property ConorTraCty As Object + Public Property ConorTraCtry As Object + Public Property ConorTraTIN As Object + Public Property ConorTraAdressIDDHF As Object + Public Property ConeeTraNa As Object + Public Property ConeeTraStrt As Object + Public Property ConeeTraPst As Object + Public Property ConeeTraCty As Object + Public Property ConeeTraCtry As Object + Public Property ConeeTraTIN As Object + Public Property ConeeTraAdressIDDHF As Object + Public Property ExtraDEBundesland As Object + + ' ====== Unterlisten ====== + Public Property DocCerts As New List(Of cDHF_Import_GdsItemDocCerts) + Public Property Packs As New List(Of cDHF_Import_GdsItemPack) + + Private Const TBL As String = "imDHFAnmGdsItem" + + Friend Sub FillFromReader(dr As SqlDataReader) + Dim props = Me.GetType().GetProperties(BindingFlags.Public Or BindingFlags.Instance). + Where(Function(p) p.CanRead AndAlso p.CanWrite AndAlso p.Name <> NameOf(DocCerts) AndAlso p.Name <> NameOf(Packs)) + For Each p In props + If dr.GetSchemaTable().Rows.Cast(Of DataRow)().Any(Function(r) r("ColumnName").ToString() = p.Name) Then + If dr.IsDBNull(dr.GetOrdinal(p.Name)) Then + p.SetValue(Me, Nothing) + Else + p.SetValue(Me, dr(p.Name)) + End If + End If + Next + End Sub + + Private Function GetVarList(Optional includePK As Boolean = True) As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) + Dim l As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) + If includePK Then + l.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("LizenzNr", LizenzNr, "LizenzNr", True)) + l.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("OperatorID", OperatorID, "OperatorID", True)) + l.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("VorgangID", VorgangID, "VorgangID", True)) + l.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("AnmID", AnmID, "AnmID", True)) + l.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Kennung", Kennung, "Kennung", True)) + l.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("GdsItemID", GdsItemID, "GdsItemID", True)) + End If + + Dim skip = New HashSet(Of String)(StringComparer.OrdinalIgnoreCase) From { + "LizenzNr", "OperatorID", "VorgangID", "AnmID", "Kennung", "GdsItemID", + NameOf(DocCerts), NameOf(Packs) + } + For Each p In Me.GetType().GetProperties(BindingFlags.Public Or BindingFlags.Instance) + If Not p.CanRead OrElse Not p.CanWrite OrElse skip.Contains(p.Name) Then Continue For + l.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable(p.Name, p.GetValue(Me), p.Name, False)) + Next + Return l + End Function + + Friend Sub Save(conn As SqlConnection, tr As SqlTransaction) + ' Upsert Position + Dim vars = GetVarList(includePK:=True) + Dim wherePk = "WHERE [LizenzNr]=@LizenzNr AND [OperatorID]=@OperatorID AND [VorgangID]=@VorgangID AND [AnmID]=@AnmID AND [Kennung]=@Kennung AND [GdsItemID]=@GdsItemID" + Dim sqlCheck = $"IF EXISTS(SELECT 1 FROM [{TBL}] {wherePk}) BEGIN {_SqlDyn.BuildUpdateCmd(TBL, vars)} END ELSE BEGIN {_SqlDyn.BuildInsertCmd(TBL, vars)} END" + Using cmd As New SqlCommand(sqlCheck, conn, tr) + _SqlDyn.AddParams(cmd, vars) + cmd.ExecuteNonQuery() + End Using + + ' Kinder neu schreiben (DocCerts, Packs): delete + insert + DeleteChildren(conn, tr) + + For Each d In DocCerts + d.LizenzNr = LizenzNr : d.OperatorID = OperatorID : d.VorgangID = VorgangID : d.AnmID = AnmID : d.Kennung = Kennung + d.GdsItemID = GdsItemID + d.Save(conn, tr) + Next + For Each p In Packs + p.LizenzNr = LizenzNr : p.OperatorID = OperatorID : p.VorgangID = VorgangID : p.AnmID = AnmID : p.Kennung = Kennung + p.GdsItemID = GdsItemID + p.Save(conn, tr) + Next + End Sub + + Private Sub DeleteChildren(conn As SqlConnection, tr As SqlTransaction) + Dim wherePk = "WHERE [LizenzNr]=@LizenzNr AND [OperatorID]=@OperatorID AND [VorgangID]=@VorgangID AND [AnmID]=@AnmID AND [Kennung]=@Kennung AND [GdsItemID]=@GdsItemID" + For Each ttt In {"imDHFAnmGdsItemDocCerts", "imDHFAnmGdsItemPack"} + Using cmd As New SqlCommand($"DELETE FROM [{ttt}] {wherePk}", conn, tr) + cmd.Parameters.AddWithValue("@LizenzNr", LizenzNr) + cmd.Parameters.AddWithValue("@OperatorID", OperatorID) + cmd.Parameters.AddWithValue("@VorgangID", VorgangID) + cmd.Parameters.AddWithValue("@AnmID", AnmID) + cmd.Parameters.AddWithValue("@Kennung", Kennung) + cmd.Parameters.AddWithValue("@GdsItemID", GdsItemID) + cmd.ExecuteNonQuery() + End Using + Next + End Sub + + Friend Sub LoadChildren(conn As SqlConnection) + ' DocCerts + DocCerts.Clear() + Dim sDoc = "SELECT * FROM [imDHFAnmGdsItemDocCerts] WHERE [LizenzNr]=@LizenzNr AND [OperatorID]=@OperatorID AND [VorgangID]=@VorgangID AND [AnmID]=@AnmID AND [Kennung]=@Kennung AND [GdsItemID]=@GdsItemID ORDER BY DocCertsID" + Using cmd As New SqlCommand(sDoc, conn) + cmd.Parameters.AddWithValue("@LizenzNr", LizenzNr) + cmd.Parameters.AddWithValue("@OperatorID", OperatorID) + cmd.Parameters.AddWithValue("@VorgangID", VorgangID) + cmd.Parameters.AddWithValue("@AnmID", AnmID) + cmd.Parameters.AddWithValue("@Kennung", Kennung) + cmd.Parameters.AddWithValue("@GdsItemID", GdsItemID) + Using dr = cmd.ExecuteReader() + While dr.Read() + Dim d As New cDHF_Import_GdsItemDocCerts() With { + .LizenzNr = LizenzNr, .OperatorID = OperatorID, .VorgangID = VorgangID, + .AnmID = AnmID, .Kennung = Kennung, .GdsItemID = GdsItemID, + .DocCertsID = dr("DocCertsID").ToString() + } + d.FillFromReader(dr) + DocCerts.Add(d) + End While + End Using + End Using + + ' Packs + Packs.Clear() + Dim sPack = "SELECT * FROM [imDHFAnmGdsItemPack] WHERE [LizenzNr]=@LizenzNr AND [OperatorID]=@OperatorID AND [VorgangID]=@VorgangID AND [AnmID]=@AnmID AND [Kennung]=@Kennung AND [GdsItemID]=@GdsItemID ORDER BY PackID" + Using cmd As New SqlCommand(sPack, conn) + cmd.Parameters.AddWithValue("@LizenzNr", LizenzNr) + cmd.Parameters.AddWithValue("@OperatorID", OperatorID) + cmd.Parameters.AddWithValue("@VorgangID", VorgangID) + cmd.Parameters.AddWithValue("@AnmID", AnmID) + cmd.Parameters.AddWithValue("@Kennung", Kennung) + cmd.Parameters.AddWithValue("@GdsItemID", GdsItemID) + Using dr = cmd.ExecuteReader() + While dr.Read() + Dim p As New cDHF_Import_GdsItemPack() With { + .LizenzNr = LizenzNr, .OperatorID = OperatorID, .VorgangID = VorgangID, + .AnmID = AnmID, .Kennung = Kennung, .GdsItemID = GdsItemID, + .PackID = dr("PackID").ToString() + } + p.FillFromReader(dr) + Packs.Add(p) + End While + End Using + End Using + End Sub +End Class + +' =========================================================== +' ============ DOC/CERTS (imDHFAnmGdsItemDocCerts) ===== +' =========================================================== +Public Class cDHF_Import_GdsItemDocCerts + ' FK/PK + Public Property LizenzNr As String + Public Property OperatorID As String + Public Property VorgangID As String + Public Property AnmID As String + Public Property Kennung As String + Public Property GdsItemID As String + Public Property DocCertsID As String + + ' Felder + Public Property DocCd As Object + Public Property DTy As Object + Public Property DRef As Object + Public Property IssD As Object + Public Property IssCtry As Object + Public Property DTIN As Object + Public Property Curr As Object + Public Property Avail As Object + Public Property UidVid As Object + Public Property IssAdm As Object + Public Property ValD As Object + Public Property MaxValD As Object + Public Property CInf As Object + Public Property InfoLNG As Object + Public Property Unit As Object + Public Property Quant As Object + Public Property MaxQuant As Object + Public Property WOUnit As Object + Public Property WOoUnit As Object + Public Property WOCurr As Object + Public Property WOInQuant As Object + Public Property WOQuant As Object + Public Property WORemQunat As Object + Public Property CRefTy As Object + Public Property CRefRef As Object + Public Property CRefIt As Object + Public Property CRefLNG As Object + Public Property AvailDT As Object + Public Property AdressIDDHF As Object + Public Property Na As Object + Public Property Strt As Object + Public Property Pst As Object + Public Property Cty As Object + Public Property Ctry As Object + Public Property LNG As Object + + Private Const TBL As String = "imDHFAnmGdsItemDocCerts" + + Private Function GetVarList(Optional includePK As Boolean = True) As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) + Dim l As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) + If includePK Then + l.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("LizenzNr", LizenzNr, "LizenzNr", True)) + l.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("OperatorID", OperatorID, "OperatorID", True)) + l.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("VorgangID", VorgangID, "VorgangID", True)) + l.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("AnmID", AnmID, "AnmID", True)) + l.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Kennung", Kennung, "Kennung", True)) + l.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("GdsItemID", GdsItemID, "GdsItemID", True)) + l.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("DocCertsID", DocCertsID, "DocCertsID", True)) + End If + + Dim skip = New HashSet(Of String)(StringComparer.OrdinalIgnoreCase) From { + "LizenzNr", "OperatorID", "VorgangID", "AnmID", "Kennung", "GdsItemID", "DocCertsID" + } + For Each p In Me.GetType().GetProperties(BindingFlags.Public Or BindingFlags.Instance) + If Not p.CanRead OrElse Not p.CanWrite OrElse skip.Contains(p.Name) Then Continue For + l.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable(p.Name, p.GetValue(Me), p.Name, False)) + Next + Return l + End Function + + Friend Sub Save(conn As SqlConnection, tr As SqlTransaction) + Dim vars = GetVarList(includePK:=True) + Dim wherePk = "WHERE [LizenzNr]=@LizenzNr AND [OperatorID]=@OperatorID AND [VorgangID]=@VorgangID AND [AnmID]=@AnmID AND [Kennung]=@Kennung AND [GdsItemID]=@GdsItemID AND [DocCertsID]=@DocCertsID" + Dim sqlCheck = $"IF EXISTS(SELECT 1 FROM [{TBL}] {wherePk}) BEGIN {_SqlDyn.BuildUpdateCmd(TBL, vars)} END ELSE BEGIN {_SqlDyn.BuildInsertCmd(TBL, vars)} END" + Using cmd As New SqlCommand(sqlCheck, conn, tr) + _SqlDyn.AddParams(cmd, vars) + cmd.ExecuteNonQuery() + End Using + End Sub + + Friend Sub FillFromReader(dr As SqlDataReader) + Dim props = Me.GetType().GetProperties(BindingFlags.Public Or BindingFlags.Instance) + For Each p In props + If {"LizenzNr", "OperatorID", "VorgangID", "AnmID", "Kennung", "GdsItemID", "DocCertsID"}.Contains(p.Name) Then Continue For + If dr.GetSchemaTable().Rows.Cast(Of DataRow)().Any(Function(r) r("ColumnName").ToString() = p.Name) Then + If dr.IsDBNull(dr.GetOrdinal(p.Name)) Then + p.SetValue(Me, Nothing) + Else + p.SetValue(Me, dr(p.Name)) + End If + End If + Next + End Sub +End Class + +' =========================================================== +' ================ PACK (imDHFAnmGdsItemPack) ========== +' =========================================================== +Public Class cDHF_Import_GdsItemPack + ' FK/PK + Public Property LizenzNr As String + Public Property OperatorID As String + Public Property VorgangID As String + Public Property AnmID As String + Public Property Kennung As String + Public Property GdsItemID As String + Public Property PackID As String + + ' Felder + Public Property Mark As Object + Public Property Kind As Object + Public Property Nr As Object + Public Property Piec As Object + + Private Const TBL As String = "imDHFAnmGdsItemPack" + + Private Function GetVarList(Optional includePK As Boolean = True) As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) + Dim l As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) + If includePK Then + l.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("LizenzNr", LizenzNr, "LizenzNr", True)) + l.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("OperatorID", OperatorID, "OperatorID", True)) + l.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("VorgangID", VorgangID, "VorgangID", True)) + l.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("AnmID", AnmID, "AnmID", True)) + l.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("Kennung", Kennung, "Kennung", True)) + l.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("GdsItemID", GdsItemID, "GdsItemID", True)) + l.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("PackID", PackID, "PackID", True)) + End If + + Dim skip = New HashSet(Of String)(StringComparer.OrdinalIgnoreCase) From { + "LizenzNr", "OperatorID", "VorgangID", "AnmID", "Kennung", "GdsItemID", "PackID" + } + For Each p In Me.GetType().GetProperties(BindingFlags.Public Or BindingFlags.Instance) + If Not p.CanRead OrElse Not p.CanWrite OrElse skip.Contains(p.Name) Then Continue For + l.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable(p.Name, p.GetValue(Me), p.Name, False)) + Next + Return l + End Function + + Friend Sub Save(conn As SqlConnection, tr As SqlTransaction) + Dim vars = GetVarList(includePK:=True) + Dim wherePk = "WHERE [LizenzNr]=@LizenzNr AND [OperatorID]=@OperatorID AND [VorgangID]=@VorgangID AND [AnmID]=@AnmID AND [Kennung]=@Kennung AND [GdsItemID]=@GdsItemID AND [PackID]=@PackID" + Dim sqlCheck = $"IF EXISTS(SELECT 1 FROM [{TBL}] {wherePk}) BEGIN {_SqlDyn.BuildUpdateCmd(TBL, vars)} END ELSE BEGIN {_SqlDyn.BuildInsertCmd(TBL, vars)} END" + Using cmd As New SqlCommand(sqlCheck, conn, tr) + _SqlDyn.AddParams(cmd, vars) + cmd.ExecuteNonQuery() + End Using + End Sub + + Friend Sub FillFromReader(dr As SqlDataReader) + Dim props = Me.GetType().GetProperties(BindingFlags.Public Or BindingFlags.Instance) + For Each p In props + If {"LizenzNr", "OperatorID", "VorgangID", "AnmID", "Kennung", "GdsItemID", "PackID"}.Contains(p.Name) Then Continue For + If dr.GetSchemaTable().Rows.Cast(Of DataRow)().Any(Function(r) r("ColumnName").ToString() = p.Name) Then + If dr.IsDBNull(dr.GetOrdinal(p.Name)) Then + p.SetValue(Me, Nothing) + Else + p.SetValue(Me, dr(p.Name)) + End If + End If + Next + End Sub + + +End Class + + +' ----------------------------------------------- +' Gemeinsame Utilities für dynamische SQLs nach dem Muster aus _BASE +' ----------------------------------------------- +Friend Module _SqlDyn + Friend Function BuildUpdateCmd(tableName As String, vars As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)) As String + Dim sets As New List(Of String) + Dim wheres As New List(Of String) + For Each v In vars + If v.isPrimaryParam Then + wheres.Add("[" & v.Text & "] = @" & v.Scalarvariable) + Else + sets.Add("[" & v.Text & "] = @" & v.Scalarvariable) + End If + Next + If sets.Count = 0 Then Throw New Exception("Keine Non-PK-Spalten für UPDATE.") + Return $"UPDATE [{tableName}] SET {String.Join(",", sets)} WHERE {String.Join(" AND ", wheres)}" + End Function + + Friend Function BuildInsertCmd(tableName As String, vars As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)) As String + Dim cols As New List(Of String) + Dim pars As New List(Of String) + For Each v In vars + If Not v.isPrimaryParam Then + cols.Add("[" & v.Text & "]") + pars.Add("@" & v.Scalarvariable) + Else + ' PK-Spalten oft ebenfalls explizit spaltenseitig – hier mit aufnehmen, + ' sofern in DB nicht als IDENTITY definiert: + cols.Add("[" & v.Text & "]") + pars.Add("@" & v.Scalarvariable) + End If + Next + Return $"INSERT INTO [{tableName}] ({String.Join(",", cols)}) VALUES({String.Join(",", pars)})" + End Function + + Friend Sub AddParams(cmd As SqlCommand, vars As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)) + For Each v In vars + cmd.Parameters.AddWithValue("@" & v.Scalarvariable, If(v.Value, DBNull.Value)) + Next + End Sub + + Friend Sub DataReaderToObject(dr As SqlDataReader, target As Object, vars As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)) + Dim t = target.GetType() + For Each v In vars + Dim pi = t.GetProperty(v.Text) + If pi IsNot Nothing AndAlso Not dr.IsDBNull(dr.GetOrdinal(v.Text)) Then + pi.SetValue(target, dr(v.Text)) + ElseIf pi IsNot Nothing Then + pi.SetValue(target, Nothing) + End If + Next + End Sub + + + Sub test() + + '' Verwendung(Beispiel) + + ' Kopf anlegen + Dim imp As New cDHF_Import("LIC", "OP", "VORG", "ANM", "KENN") + imp.RechnungsNr = "INV-2025-001" + imp.InvCurr = "EUR" + imp.InvVal = 12345D + + ' Position hinzufügen + Dim it = New cDHF_Import_GdsItem() With { + .GdsItemID = "1", + .ItNr = 1, + .ComCd = "85044030", + .GdsDes = "Power Supply", + .Net = 12.34D, + .ItVal = 999D + } + ' Doc/Certs + it.DocCerts.Add(New cDHF_Import_GdsItemDocCerts() With { + .DocCertsID = "1", + .DocCd = "N380", + .DRef = "REF-123", + .Avail = 1 + }) + ' Packstücke + it.Packs.Add(New cDHF_Import_GdsItemPack() With { + .PackID = "1", + .Kind = "PK", + .Piec = 3 + }) + + imp.GdsItems.Add(it) + + ' Speichern -> speichert Kopf + Position + Unterzeilen in einer Transaktion + Dim ok = imp.Save() + + ' Laden + Dim imp2 As New cDHF_Import("S01122", "1", "VORG", "ANM", "KENN") + ' -> imp2 ist nun inkl. GdsItems, DocCerts und Packs befüllt + + End Sub +End Module diff --git a/VERAG_PROG_ALLGEMEIN/VERAG_PROG_ALLGEMEIN.vbproj b/VERAG_PROG_ALLGEMEIN/VERAG_PROG_ALLGEMEIN.vbproj index 40ee4b14..7f3feeb3 100644 --- a/VERAG_PROG_ALLGEMEIN/VERAG_PROG_ALLGEMEIN.vbproj +++ b/VERAG_PROG_ALLGEMEIN/VERAG_PROG_ALLGEMEIN.vbproj @@ -396,6 +396,7 @@ +