From 7c22afa197f9b92ccc0321d24f36c448477414e8 Mon Sep 17 00:00:00 2001 From: "d.breimaier" Date: Thu, 25 Sep 2025 13:04:34 +0200 Subject: [PATCH] StartOpt --- .../frmStartOptions.Designer.vb | 60 ++++--- initATLASAufschubkonten/frmStartOptions.vb | 168 +++++++++++++++--- 2 files changed, 179 insertions(+), 49 deletions(-) diff --git a/initATLASAufschubkonten/frmStartOptions.Designer.vb b/initATLASAufschubkonten/frmStartOptions.Designer.vb index 2907a64..b7868c7 100644 --- a/initATLASAufschubkonten/frmStartOptions.Designer.vb +++ b/initATLASAufschubkonten/frmStartOptions.Designer.vb @@ -277,6 +277,8 @@ Partial Class frmStartOptions Me.Button27 = New System.Windows.Forms.Button() Me.lblWartungen = New System.Windows.Forms.Label() Me.TabPage7 = New System.Windows.Forms.TabPage() + Me.Label50 = New System.Windows.Forms.Label() + Me.Label49 = New System.Windows.Forms.Label() Me.Label48 = New System.Windows.Forms.Label() Me.cbxCSsync = New System.Windows.Forms.CheckBox() Me.cbxMailsenden = New System.Windows.Forms.CheckBox() @@ -352,8 +354,7 @@ Partial Class frmStartOptions Me.MyTextBox1 = New VERAG_PROG_ALLGEMEIN.MyTextBox() Me.txtGJ_UNISPED = New VERAG_PROG_ALLGEMEIN.MyTextBox() Me.DataGridViewTextBoxColumn1 = New System.Windows.Forms.DataGridViewTextBoxColumn() - Me.Label49 = New System.Windows.Forms.Label() - Me.Label50 = New System.Windows.Forms.Label() + Me.cbxEventtriggered = New System.Windows.Forms.CheckBox() Me.pnl.SuspendLayout() CType(Me.PictureBox24, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.PictureBox23, System.ComponentModel.ISupportInitialize).BeginInit() @@ -3467,6 +3468,7 @@ Partial Class frmStartOptions ' 'TabPage7 ' + Me.TabPage7.Controls.Add(Me.cbxEventtriggered) Me.TabPage7.Controls.Add(Me.Label50) Me.TabPage7.Controls.Add(Me.Label49) Me.TabPage7.Controls.Add(Me.Label48) @@ -3490,6 +3492,28 @@ Partial Class frmStartOptions Me.TabPage7.Text = "Creditsafe" Me.TabPage7.UseVisualStyleBackColor = True ' + 'Label50 + ' + Me.Label50.AutoSize = True + Me.Label50.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label50.ForeColor = System.Drawing.Color.Red + Me.Label50.Location = New System.Drawing.Point(168, 181) + Me.Label50.Name = "Label50" + Me.Label50.Size = New System.Drawing.Size(228, 13) + Me.Label50.TabIndex = 167 + Me.Label50.Text = "*prüfe Kunden, deren Bon-Dat. älter ist" + ' + 'Label49 + ' + Me.Label49.AutoSize = True + Me.Label49.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label49.ForeColor = System.Drawing.Color.Red + Me.Label49.Location = New System.Drawing.Point(109, 246) + Me.Label49.Name = "Label49" + Me.Label49.Size = New System.Drawing.Size(234, 13) + Me.Label49.TabIndex = 166 + Me.Label49.Text = "*nur Info bei Kundenrechnung < 2 Jahre" + ' 'Label48 ' Me.Label48.AutoSize = True @@ -4715,27 +4739,18 @@ Partial Class frmStartOptions Me.DataGridViewTextBoxColumn1.MinimumWidth = 8 Me.DataGridViewTextBoxColumn1.Name = "DataGridViewTextBoxColumn1" ' - 'Label49 + 'cbxEventtriggered ' - Me.Label49.AutoSize = True - Me.Label49.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label49.ForeColor = System.Drawing.Color.Red - Me.Label49.Location = New System.Drawing.Point(109, 246) - Me.Label49.Name = "Label49" - Me.Label49.Size = New System.Drawing.Size(234, 13) - Me.Label49.TabIndex = 166 - Me.Label49.Text = "*nur Info bei Kundenrechnung < 2 Jahre" - ' - 'Label50 - ' - Me.Label50.AutoSize = True - Me.Label50.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.Label50.ForeColor = System.Drawing.Color.Red - Me.Label50.Location = New System.Drawing.Point(168, 181) - Me.Label50.Name = "Label50" - Me.Label50.Size = New System.Drawing.Size(228, 13) - Me.Label50.TabIndex = 167 - Me.Label50.Text = "*prüfe Kunden, deren Bon-Dat. älter ist" + Me.cbxEventtriggered.AutoSize = True + Me.cbxEventtriggered.Checked = True + Me.cbxEventtriggered.CheckState = System.Windows.Forms.CheckState.Checked + Me.cbxEventtriggered.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.cbxEventtriggered.Location = New System.Drawing.Point(14, 144) + Me.cbxEventtriggered.Name = "cbxEventtriggered" + Me.cbxEventtriggered.Size = New System.Drawing.Size(237, 17) + Me.cbxEventtriggered.TabIndex = 168 + Me.cbxEventtriggered.Text = "Daily-Check (schneller aber weniger deailiert)" + Me.cbxEventtriggered.UseVisualStyleBackColor = True ' 'frmStartOptions ' @@ -5145,4 +5160,5 @@ Partial Class frmStartOptions Friend WithEvents cbxCSsync As CheckBox Friend WithEvents Label49 As Label Friend WithEvents Label50 As Label + Friend WithEvents cbxEventtriggered As CheckBox End Class diff --git a/initATLASAufschubkonten/frmStartOptions.vb b/initATLASAufschubkonten/frmStartOptions.vb index 55314d4..b12a872 100644 --- a/initATLASAufschubkonten/frmStartOptions.vb +++ b/initATLASAufschubkonten/frmStartOptions.vb @@ -833,6 +833,17 @@ Public Class frmStartOptions End If + Case "CREDITSAFE_EVENTS_DETAIL" + VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM = False + + Dim upateKunden As Boolean = True + Dim OnlyCurrentMonthData As Boolean = True + Dim setzeInfoImKunden As Boolean = False + Dim sendMail As Boolean = True + + importCreditsafeEvents(CDate("01." & Now.Month & "." & Now.Year).ToShortDateString, OnlyCurrentMonthData, upateKunden, setzeInfoImKunden, sendMail, True) + closeMe() + Case "CREDITSAFE_EVENTS" VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM = False @@ -841,7 +852,7 @@ Public Class frmStartOptions Dim setzeInfoImKunden As Boolean = False Dim sendMail As Boolean = True - importCreditsafeEvents(CDate("01." & Now.Month & "." & Now.Year).ToShortDateString, OnlyCurrentMonthData, upateKunden, setzeInfoImKunden, sendMail) + importCreditsafeEvents(CDate("01." & Now.Month & "." & Now.Year).ToShortDateString, OnlyCurrentMonthData, upateKunden, setzeInfoImKunden, sendMail, False) closeMe() Case "CREDITSAFE_UPLOADS" @@ -6341,23 +6352,29 @@ weiter: End If - importCreditsafeEvents(datumString, cbCheckDate.Checked, bcxKundendatenaktCS.Checked, cbxKundenbesonderheitenCS.Checked, cbxMailsenden.Checked) + importCreditsafeEvents(datumString, cbCheckDate.Checked, bcxKundendatenaktCS.Checked, cbxKundenbesonderheitenCS.Checked, cbxMailsenden.Checked, Not cbxEventtriggered.Checked) End Sub - Private Sub importCreditsafeEvents(datum As String, checkDate As Boolean, upateKunden As Boolean, setzeKundenbesonderheiten As Boolean, sendMail As Boolean) + Private Sub importCreditsafeEvents(datum As String, checkDate As Boolean, upateKunden As Boolean, setzeKundenbesonderheiten As Boolean, sendMail As Boolean, companyDetailEventsRequest As Boolean) + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 'WICHTIG, bei companyDetailEventsRequest = true wird gleich Punkt 3 gemacht (dauert länger, aber mehr Datensätze und alle Kunden werden geprüft, bei companyDetailEventsRequest = false wird die u.a. Best Practice-Methode durchgeführt-> also triggerbasierend)!!!! + + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 'Best Practices for Viewing Notification Events '1. Use Portfolio-Specific Events for Targeted Monitoring: Start with the portfolio-specific endpoint to focus on changes relevant to a particular portfolio. '2. Leverage Global Events for a Broader View: Use the all-events endpoint to gain a comprehensive overview of all notifications across your portfolios. '3. Drill Down to Company-Level Events When Needed: For detailed insights into a specific company, use the company-specific endpoint. - '4. Verify Enabled Rules: Ensure that the appropriate event rules are enabled for your portfolios to capture the desired notifications. Refer to the Activate Event Rules section for guidance. - 'aktuell machem wir gleich Punkt 3 (damit haben wir alle Informationen), das verursacht allerdings sehr viele API-Aurfrufe, besser nach dem Best Practice oben! + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Dim creditsaveOld As String = " @@ -6388,33 +6405,102 @@ weiter: - Dim creditsave As String = "select distinct(ba_KundenNr) from Kunden + + + Dim creditsave As String = "select distinct(ba_KundenNr),f.Firma from Kunden inner join tblKundenErweitert on Kunden.KundenNr = kde_KundenNr + inner join Filialen as f on f.FilialenNr = Kunden.FilialenNr inner join tblBonitaetsauskunft on ba_KundenNr = kde_KundenNr where isnull(tblKundenErweitert.kde_CreditSaveId,'') <> '' and kde_CreditSaveId <> 'True' and kde_CreditSaveId <>'False' and isnull(kde_CreditSaveNo,'') <> '' and kde_CSPortfolioAdded = 1 AND ba_Pruefungstool = 'creditsafe API'" & IIf(datum <> "", " AND Kunden.Bonitätsdatum <= '" & datum & "'", "") - If False Then - creditsave &= " and (ba_KundenNr = 718137 or ba_KundenNr = 1003418)" - End If - - - Dim dtRechnungen As DataTable = (New SQL).loadDgvBySql("select distinct(RechnungsKundenNr) from Rechnungsausgang where cast(RechnungsDatum as Date) >= ' " & Today().AddYears(-2) & "' ", "FMZOLL") - - Dim dtCreditsafe As DataTable = (New SQL).loadDgvBySql(creditsave, "FMZOLL") - - If dtCreditsafe.Rows.Count = 0 Then Exit Sub - + 'KundenNr und Firma Dim cs = New cCreditSafeAPI("creditsafe") - Dim dt_fehlendeCreditsafeIDS As New DataTable - dt_fehlendeCreditsafeIDS.Columns.Add("KundenNr", GetType(String)) - dt_fehlendeCreditsafeIDS.Columns.Add("Creditsafe-ID", GetType(String)) - dt_fehlendeCreditsafeIDS.Columns.Add("Creditsafe-NO", GetType(String)) - + Dim Mailinfolast2Years As Boolean = False If cs.authenticate() = "200" Then + If Not companyDetailEventsRequest Then + + Dim API_Start_Daily = VERAG_PROG_ALLGEMEIN.cAPI.INSERT_API(VERAG_PROG_ALLGEMEIN.cAPI_INOUT.IN, VERAG_PROG_ALLGEMEIN.cAPI_Type.REST, VERAG_PROG_ALLGEMEIN.cAPI_ART.AVISO_IN_CS, "DAiLY-CREDITSAFE-EVENTS-IMPORT", "CS") + + Dim dtMonitoredRequest As New DataTable + + Dim companyDummy As New cCreditSafeAPI.Company("", "", "", "", "", "", Nothing, "", "", "", "", "", "", "", "", "", 0) + If txtCSDate.Text <> "" AndAlso IsDate(txtCSDate.Text) Then + companyDummy.lastChecked = CDate(txtCSDate.Text) + End If +repeatRequestDaily: + Dim page As Integer = 0 + Dim totalPages As Integer = -1 + + Dim APIText = cs.getCompanyEvents(companyDummy, dtMonitoredRequest, False, totalPages, checkDate, upateKunden, False,, setzeKundenbesonderheiten, True,, page) + If (APIText.Contains("Error") Or APIText.Contains("Verbindungsfehler")) Then API_Start_Daily.UPDTAE_ERR("ERROR", APIText, "dailyImportCreditsafeEvents") + + If APIText.Contains("Invalid token") Then + If Not cs.authenticate() = 200 Then + API_Start_Daily.UPDTAE_ERR("ERROR", APIText, "importCreditsafeEvents") + Exit Sub + Else + Thread.Sleep(4000) + GoTo repeatRequestDaily + End If + End If + + If totalPages > 1 Then + For i = 2 To totalPages +repeatRequestDailyPages: + APIText = cs.getCompanyEvents(companyDummy, dtMonitoredRequest, False, totalPages, checkDate, upateKunden, False,, setzeKundenbesonderheiten, True,, i) + If APIText.Contains("Invalid token") Then + If Not cs.authenticate() = 200 Then + API_Start_Daily.UPDTAE_ERR("ERROR", APIText, "dailyImportCreditsafeEvents") + Exit For + Else + Thread.Sleep(4000) + GoTo repeatRequestDailyPages + End If + End If + Next + + End If + + + + Exit Sub + + End If + + + If False Then + creditsave &= " and (ba_KundenNr = 718137 or ba_KundenNr = 1003418)" + End If + + + Dim dtRechnungen As DataTable = (New SQL).loadDgvBySql("select distinct(RechnungsKundenNr) from Rechnungsausgang where cast(RechnungsDatum as Date) >= ' " & Today().AddYears(-2) & "' ", "FMZOLL") + + Dim dtCreditsafe As DataTable = (New SQL).loadDgvBySql(creditsave, "FMZOLL") + + If dtCreditsafe.Rows.Count = 0 Then Exit Sub + + Dim countMissingVerag As Integer = 0 + Dim countMissingIMEX As Integer = 0 + Dim countMissingUNISPED As Integer = 0 + Dim countMissingAMBAR As Integer = 0 + + Dim dt_fehlendeCreditsafeIDS As New DataTable + dt_fehlendeCreditsafeIDS.Columns.Add("KundenNr", GetType(String)) + dt_fehlendeCreditsafeIDS.Columns.Add("Creditsafe-ID", GetType(String)) + dt_fehlendeCreditsafeIDS.Columns.Add("Creditsafe-NO", GetType(String)) + dt_fehlendeCreditsafeIDS.Columns.Add("Firma", GetType(String)) + + + + Dim counter As Integer = 0 + Dim API_Start = VERAG_PROG_ALLGEMEIN.cAPI.INSERT_API(VERAG_PROG_ALLGEMEIN.cAPI_INOUT.IN, VERAG_PROG_ALLGEMEIN.cAPI_Type.REST, VERAG_PROG_ALLGEMEIN.cAPI_ART.AVISO_IN_CS, "CREDITSAFE-EVENTS-IMPORT", "CS") + If dtCreditsafe.Rows.Count = 0 Then + API_Start.UPDTAE_ERR("ERROR - KEINE DATEN", "Anzahl abgefragte Datensätze:" & dtCreditsafe.Rows.Count & " Anzahl importierte Datensätze:" & counter & " Anzahl fehlende Creditsafe-IDs:" & dt_fehlendeCreditsafeIDS.Rows.Count, "importCreditsafeEvents") + End If For Each row As DataRow In dtCreditsafe.Rows @@ -6429,7 +6515,7 @@ weiter: If currentBonID > 0 Then company.csBonID = currentBonID Dim dt As New DataTable() - Dim Mailinfolast2Years As Boolean = False + Dim exists As Boolean = dtRechnungen.AsEnumerable().Any(Function(r) r.Field(Of Integer)("RechnungsKundenNr") = KUNDE_ERW.kde_KundenNr) If sendMail Then @@ -6440,10 +6526,10 @@ weiter: End If End If - +repeatRequest: Dim APIText As String = "" If exists Then - APIText = cs.getCompanyEvents(company, dt, checkDate, upateKunden, False,, setzeKundenbesonderheiten, Mailinfolast2Years) + APIText = cs.getCompanyEvents(company, dt, False, checkDate, upateKunden, False,, setzeKundenbesonderheiten, Mailinfolast2Years, row("Firma")) End If If (APIText.Contains("Error") Or APIText.Contains("Verbindungsfehler")) Then @@ -6455,7 +6541,18 @@ weiter: R("KundenNr") = KUNDE_ERW.kde_KundenNr R("Creditsafe-ID") = KUNDE_ERW.kde_CreditSaveId R("Creditsafe-NO") = KUNDE_ERW.kde_CreditSaveNo - dt.Rows.Add(R) + R("Firma") = row("Firma") + dt_fehlendeCreditsafeIDS.Rows.Add(R) + + If Not VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM Then + Select Case row(FIRMA) + Case "VERAG" : countMissingVerag += 1 + Case "IMEX" : countMissingIMEX += 1 + Case "AMBAR" : countMissingAMBAR += 1 + Case "UNISPED" : countMissingUNISPED += 1 + End Select + End If + KUNDE_ERW.kde_CreditSaveId = "" KUNDE_ERW.SAVE() @@ -6467,21 +6564,38 @@ weiter: Exit For Else Thread.Sleep(4000) + GoTo repeatRequest End If End If + Else + counter += 1 + End If Thread.Sleep(1000) Next + If dtCreditsafe.Rows.Count = (counter - dt_fehlendeCreditsafeIDS.Rows.Count) Then + API_Start.UPDTAE_OK() + Else + API_Start.UPDTAE_ERR("IMPORT UNVOLLSTÄNDIG", "Anzahl abgefragte Datensätze:" & dtCreditsafe.Rows.Count & " Anzahl importierte Datensätze:" & counter & " Anzahl fehlende Creditsafe-IDs:" & dt_fehlendeCreditsafeIDS.Rows.Count, "importCreditsafeEvents") + End If + + + If dt_fehlendeCreditsafeIDS.Rows.Count > 0 Then Dim filepath = VERAG_PROG_ALLGEMEIN.cProgramFunctions.genExcelFromDT_NEW(dt_fehlendeCreditsafeIDS,,,,, False) If filepath <> "" Then Dim anhenge As New List(Of String) anhenge.Add(filepath) - VERAG_PROG_ALLGEMEIN.cProgramFunctions.sendMail(IIf(VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM, "d.breimaier@verag.ag", "as@verag.ag"), IIf(VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM, "TEST-", "") & "CREDITSAFE - fehlende CS-IDs", "Im Anhang befinden sich eine Liste der Kunden, deren Creditsafe-ID ungültig sind/nicht gefunden wurden!" & "

" & "*Automatic generated e-mail*",,,,, "d.breimaier@verag.ag", anhenge) + Dim empfaneger As String = "" + If countMissingVerag > 0 Then empfaneger &= "as@verag.ag;" + If countMissingIMEX > 0 Then empfaneger &= "Viktoria.Leirich@imex-group.at;" + If countMissingUNISPED > 0 Then empfaneger &= "sabine.muehlboeck@unisped.at;" + If countMissingAMBAR > 0 Then empfaneger &= "Buchhaltung@ambarlog.com;" + If empfaneger <> "" Then VERAG_PROG_ALLGEMEIN.cProgramFunctions.sendMail(empfaneger, IIf(VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM, "TEST-", "") & "CREDITSAFE - fehlende CS-IDs", "Im Anhang befinden sich eine Liste der Kunden, deren Creditsafe-ID ungültig sind/nicht gefunden wurden!" & "

" & "*Automatic generated e-mail*",,,,, "d.breimaier@verag.ag", anhenge) End If End If