Merge branch 'newMaster2024' of https://dev.azure.com/VeragAG/_git/SDL into newMaster2024

This commit is contained in:
2025-09-08 13:46:12 +02:00
4 changed files with 230 additions and 27 deletions

View File

@@ -3352,7 +3352,16 @@ Public Class usrCntlKundenuebersicht
Dim checklastDate As Boolean = True
If cs.authenticate() = "200" Then
Dim company As New cCreditSafeAPI.Company("", "", "", "", KUNDE_ERW.kde_CreditSaveNo, KUNDE_ERW.kde_CreditSaveId, Nothing, "", "", "", "", "", "", "", "", "", KUNDE.KundenNr)
If Not KUNDE_ERW.kde_CSPortfolioAdded Then
cs.AddCompanyToPortfolio(company)
KUNDE_ERW.kde_CSPortfolioAdded = True
KUNDE_ERW.SAVE()
End If
company.lastChecked = IIf(IsDate(lastChecked), lastChecked, Today().AddDays(-30))
Dim currentBonID As Integer = SQL.getValueTxtBySql("Select Top(1) isnull(ba_id, -1) FROM [tblBonitaetsauskunft] where ba_KundenNr = " & KUNDE.KundenNr & " AND [ba_Pruefungstool] = 'creditsafe API' ORDER BY ba_Datum DESC", "FMZOLL")
@@ -3403,7 +3412,7 @@ Public Class usrCntlKundenuebersicht
MsgBox("Creditsafe-Daten wurden aktualisiert!")
Else
MsgBox("Keine Creditsafe-Änderungen seit " & lastChecked.ToShortDateString)
MsgBox("Keine Creditsafe-Änderungen seit " & lastChecked.ToShortDateString)
End If
End If

View File

@@ -103,6 +103,7 @@ Partial Class usrcntlKundeBearbeitenFull
Me.tbFiskal = New System.Windows.Forms.TabPage()
Me.UsrCntlKundeFiskaldaten1 = New SDL.usrCntlKundeFiskaldaten()
Me.tbVerrechnung = New System.Windows.Forms.TabPage()
Me.cbpKopfsammelrechnung = New System.Windows.Forms.CheckBox()
Me.pnlverag360 = New System.Windows.Forms.Panel()
Me.Label111 = New System.Windows.Forms.Label()
Me.txtFR = New VERAG_PROG_ALLGEMEIN.MyTextBox()
@@ -404,7 +405,7 @@ Partial Class usrcntlKundeBearbeitenFull
Me.cboFirma = New VERAG_PROG_ALLGEMEIN.MyComboBox()
Me.cboAuswahl = New VERAG_PROG_ALLGEMEIN.MyComboBox()
Me.DataGridViewTextBoxColumn2 = New System.Windows.Forms.DataGridViewTextBoxColumn()
Me.cbpKopfsammelrechnung = New System.Windows.Forms.CheckBox()
Me.cbxCS_Added = New System.Windows.Forms.CheckBox()
Me.tbcntrDetails.SuspendLayout()
Me.tbAbfertigung.SuspendLayout()
Me.tbcntrAbf.SuspendLayout()
@@ -1193,6 +1194,17 @@ Partial Class usrcntlKundeBearbeitenFull
Me.tbVerrechnung.Text = "Verrechnung"
Me.tbVerrechnung.UseVisualStyleBackColor = True
'
'cbpKopfsammelrechnung
'
Me.cbpKopfsammelrechnung.AutoSize = True
Me.cbpKopfsammelrechnung.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.cbpKopfsammelrechnung.Location = New System.Drawing.Point(417, 244)
Me.cbpKopfsammelrechnung.Name = "cbpKopfsammelrechnung"
Me.cbpKopfsammelrechnung.Size = New System.Drawing.Size(202, 30)
Me.cbpKopfsammelrechnung.TabIndex = 50
Me.cbpKopfsammelrechnung.Text = "Kopf-Sammelrechnung" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "(Abr. mit unvollst. Rg+ Kopfrechnung)"
Me.cbpKopfsammelrechnung.UseVisualStyleBackColor = True
'
'pnlverag360
'
Me.pnlverag360.Controls.Add(Me.Label111)
@@ -3733,6 +3745,7 @@ Partial Class usrcntlKundeBearbeitenFull
'
'tbSonstiges
'
Me.tbSonstiges.Controls.Add(Me.cbxCS_Added)
Me.tbSonstiges.Controls.Add(Me.Label113)
Me.tbSonstiges.Controls.Add(Me.Label112)
Me.tbSonstiges.Controls.Add(Me.dgvIDS_Rabatte)
@@ -5516,16 +5529,14 @@ Partial Class usrcntlKundeBearbeitenFull
Me.DataGridViewTextBoxColumn2.HeaderText = "E-Mail"
Me.DataGridViewTextBoxColumn2.Name = "DataGridViewTextBoxColumn2"
'
'cbpKopfsammelrechnung
'cbxCS_Added
'
Me.cbpKopfsammelrechnung.AutoSize = True
Me.cbpKopfsammelrechnung.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.cbpKopfsammelrechnung.Location = New System.Drawing.Point(417, 244)
Me.cbpKopfsammelrechnung.Name = "cbpKopfsammelrechnung"
Me.cbpKopfsammelrechnung.Size = New System.Drawing.Size(202, 30)
Me.cbpKopfsammelrechnung.TabIndex = 50
Me.cbpKopfsammelrechnung.Text = "Kopf-Sammelrechnung" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "(Abr. mit unvollst. Rg+ Kopfrechnung)"
Me.cbpKopfsammelrechnung.UseVisualStyleBackColor = True
Me.cbxCS_Added.AutoSize = True
Me.cbxCS_Added.Location = New System.Drawing.Point(406, 9)
Me.cbxCS_Added.Name = "cbxCS_Added"
Me.cbxCS_Added.Size = New System.Drawing.Size(15, 14)
Me.cbxCS_Added.TabIndex = 37
Me.cbxCS_Added.UseVisualStyleBackColor = True
'
'usrcntlKundeBearbeitenFull
'
@@ -5985,4 +5996,5 @@ Partial Class usrcntlKundeBearbeitenFull
Friend WithEvents Label111 As Label
Friend WithEvents cbxErstattungsart As VERAG_PROG_ALLGEMEIN.MyComboBox
Friend WithEvents cbpKopfsammelrechnung As CheckBox
Friend WithEvents cbxCS_Added As CheckBox
End Class

View File

@@ -212,6 +212,7 @@
cbxVorauszahlung.Checked = loadValue(KUNDE_ERW.kde_VZ, False)
txtVorauszahlung.Text = loadValue(KUNDE_ERW.kde_AnmerkungVZ, "")
cbxFR.Checked = loadValue(KUNDE_ERW.kde_FR, False)
cbxCS_Added.Checked = loadValue(KUNDE_ERW.kde_CSPortfolioAdded, False)
txtFR.Text = loadValue(KUNDE_ERW.kde_AnmerkungFR, "")
cbpKopfsammelrechnung.Checked = KUNDE_ERW.kde_Kopfsammelrechnung
txtAnmerkungAntraege.Text = loadValue(KUNDE_ERW.kde_AnmerkungAntrag, "")
@@ -714,6 +715,7 @@
KUNDE_ERW.kde_txtVersicherungDeckungsquote = isLeerNothingDbl(txtVersicherungDeckungsquote._value)
KUNDE_ERW.kde_txtVersicherungNichtVersicherbar = cbxNichtVersicherbar.Checked
KUNDE_ERW.kde_CSPortfolioAdded = cbxCS_Added.Checked
KUNDE_ERW.kde_Versicherung_GemeldeterBetrag = isLeerNothingDbl(txtVersicherung_GemeldeterBetrag._value)
KUNDE_ERW.kde_txtVersicherungEHNr = isLeerNothing(txtVers_EHNr._value)
@@ -737,6 +739,9 @@
KUNDE_ERW.kde_API_Tradeshift = cbxAPITradeshift.Checked
KUNDE_ERW.kde_Fakturierung_Sprache = isLeerNothing(cboRechnungSprache._value)
KUNDE_ERW.kde_CreditSaveId = isLeerNothing(txtCreditsafe.Text)
If KUNDE_ERW.kde_CreditSaveId = "" Then KUNDE_ERW.kde_CSPortfolioAdded = False
KUNDE_ERW.kde_keineMWSt = cbxkeineMWSt.Checked

View File

@@ -8,6 +8,8 @@ Imports System.Runtime.InteropServices.ComTypes
Imports System.Text.RegularExpressions
Imports System.Threading
Imports System.Web.UI
Imports com.sun.org.apache.xalan.internal.xsltc
Imports com.sun.source.tree
Imports Microsoft.VisualBasic.ApplicationServices
Imports Org.BouncyCastle.Ocsp
@@ -144,23 +146,21 @@ Public Class cCreditSafeAPI
Dim responseJson As String
Dim pdfData As New Chilkat.BinData
rest.VerboseLogging = 1
If isMonitoring Then
If csvImport Then
Dim fileInfo As New FileInfo(csvFile)
Dim content As String = File.ReadAllText(csvFile)
'content = content.Replace(";", ",")
'File.WriteAllText(csvFile, content)
Dim fileStream As New Chilkat.Stream
fileStream.SourceFile = csvFile
rest.PartSelector = "1"
rest.AddHeader("Content-Disposition", "form-data; name=""importcsv""")
rest.AddHeader("Content-Type", "file")
'rest.SetMultipartBodyString(content)
rest.AddHeader("Content-Disposition", "form-data; name=""importcsv""; filename=""importcsv.csv""")
rest.AddHeader("Content-Type", "text/csv")
rest.SetMultipartBodyStream(fileStream)
rest.PartSelector = "0"
@@ -265,7 +265,6 @@ Public Class cCreditSafeAPI
failureDesc = rest.ResponseStatusText & IIf(responseJson <> "", vbNewLine & responseJson, "")
Return failureDesc
Else
Return responseJson
End If
End If
@@ -281,6 +280,44 @@ Public Class cCreditSafeAPI
End Function
Shared Sub test(csvFile As String)
' Note: The above code does not need to be repeatedly called for each REST request.
' The rest object can be setup once, and then many requests can be sent. Chilkat will automatically
' reconnect within a FullRequest* method as needed. It is only the very first connection that is explicitly
' made via the Connect method.
rest.PartSelector = "1"
Dim fileStream1 As New Chilkat.Stream
fileStream1.SourceFile = csvFile
rest.AddHeader("Content-Disposition", "form-data; name=""importcsv""; filename=" & csvFile & "")
rest.AddHeader("Content-Type", "text/csv")
rest.SetMultipartBodyStream(fileStream1)
rest.PartSelector = "0"
rest.AddHeader("Content-Type", "multipart/form-data")
Dim strResponseBody As String = rest.FullRequestMultipart("POST", "/v1/monitoring/portfolios/1662419/import")
If (rest.LastMethodSuccess <> True) Then
Debug.WriteLine(rest.LastErrorText)
End If
Dim respStatusCode As Integer = rest.ResponseStatusCode
Debug.WriteLine("response status code = " & respStatusCode)
If (respStatusCode >= 400) Then
Debug.WriteLine("Response Status Code = " & respStatusCode)
Debug.WriteLine("Response Header:")
Debug.WriteLine(rest.ResponseHeader)
Debug.WriteLine("Response Body:")
Debug.WriteLine(strResponseBody)
End If
End Sub
@@ -321,6 +358,27 @@ Public Class cCreditSafeAPI
End Function
Shared Function GetCompaniesFromPortfolio(ByRef totalCount As Integer, Optional PortfolioID As String = "1662419") As String
Dim myUri As String = API_STRING & "/v1/monitoring/portfolios/" & PortfolioID & "/companies" 'Default
Dim jsonRespString = SendGetRequestWithAuthHeader(myUri, Nothing, "application/json", "GET", token, "", False)
Dim json As New Chilkat.JsonObject
Dim success As Boolean = json.Load(jsonRespString)
If IsNumeric(json.StringOf("totalCount")) Then
totalCount = CInt(json.StringOf("totalCount"))
Else
totalCount = -1
End If
Return jsonRespString
End Function
Shared Function searchCompanies(company As Company, ByRef dataTable As DataTable) As String
@@ -420,14 +478,22 @@ Public Class cCreditSafeAPI
End Function
Shared Function getCompanyEvents(company As Company, ByRef dtEvents As DataTable, Optional checklastChecked As Boolean = False, Optional updateKunden As Boolean = False, Optional showError As Boolean = False) As String
Shared Function getCompanyEvents(company As Company, ByRef dtEvents As DataTable, Optional checklastChecked As Boolean = False, Optional updateKunden As Boolean = False, Optional showError As Boolean = False, Optional getTotalNr As Boolean = False, Optional setzeKundenbesonderheiten As Boolean = False, Optional sendMail As Boolean = False) As String
VERAG_PROG_ALLGEMEIN.cChilkat_Helper.UnlockCilkat()
'rest.AddQueryParam("from", Today().AddDays(-1))
Dim checkDate As String = ""
If company IsNot Nothing AndAlso IsDate(company.lastChecked) Then
checkDate = company.lastChecked.ToString("yyyy-MM-ddTHH:mm:ss")
Else
checkDate = Today().AddDays(-30).ToString("yyyy-MM-ddTHH:mm:ss")
End If
Dim failureDesc As String
Dim myUrl As String = API_STRING & "/v1/monitoring/companies/" & company.creditSafeId & "/events" & IIf(checklastChecked, "?startDate=" & company.lastChecked.ToString("yyyy-MM-ddTHH:mm:ss"), "")
Dim myUrl As String = API_STRING & "/v1/monitoring/companies/" & company.creditSafeId & "/events" & IIf(checklastChecked, "?startDate=" & checkDate, "")
Dim jsonRespString = SendGetRequestWithAuthHeader(myUrl, company, "application/json", "GET", token, failureDesc)
If failureDesc <> "" Then
@@ -458,7 +524,7 @@ Public Class cCreditSafeAPI
dtEvents.Rows.Clear()
Dim num As Integer = json.SizeOfArray("data")
If num = 0 Then
If num = 0 OrElse getTotalNr Then
Return json.StringOf("totalCount")
End If
@@ -596,9 +662,13 @@ Public Class cCreditSafeAPI
'viewEvents = New DataView(dtEvents, "localEventCode IN ('CL','CR') or e.globalEventCode IN ('CL','CR')", "", DataViewRowState.CurrentRows)
End If
If company.kdNr > 0 AndAlso updateKunden AndAlso (CR <> -1000000 Or CL <> -1000000) Then
Dim triggerMail As Boolean = False
If company.kdNr > 0 AndAlso (CR <> -1000000 Or CL <> -1000000) Then
Dim KUNDE As New cKunde(company.kdNr)
Dim Mailtext As String = ""
If KUNDE.Bonitätsdatum <= CL_Datum Or KUNDE.Bonitätsdatum <= CR_Datum Then
Dim Index As Double = -1
@@ -615,12 +685,14 @@ Public Class cCreditSafeAPI
If Index <> -1 Then
If KUNDE_ERW.kde_CreditSaveBonitaetsIndex <> Index Then
createInfo("B-INDEX", KUNDE_ERW, KUNDE, Index, riskClass, Mailtext, triggerMail, setzeKundenbesonderheiten)
KUNDE_ERW.kde_CreditSaveBonitaetsIndex = Index
KUNDE_ERW.kde_CreditSaveBonitaetsklasse = riskClass
KUNDE.Bonitätsdatum = Today()
End If
Else
If KUNDE_ERW.kde_CreditSaveBonitaetsScore <> CR AndAlso CR <> defaultCR Then
createInfo("B-SCORE", KUNDE_ERW, KUNDE, CR, riskClass, Mailtext, triggerMail, setzeKundenbesonderheiten)
KUNDE_ERW.kde_CreditSaveBonitaetsScore = CR
KUNDE_ERW.kde_CreditSaveBonitaetsklasse = riskClass
KUNDE.Bonitätsdatum = Today()
@@ -628,16 +700,21 @@ Public Class cCreditSafeAPI
End If
If KUNDE.Höchstkredit <> CL AndAlso CL <> defaultCL Then
createInfo("KREDITLIMIT", KUNDE_ERW, KUNDE, CL, riskClass, Mailtext, triggerMail, setzeKundenbesonderheiten)
KUNDE.Höchstkredit = CL
If KUNDE.Bonitätsdatum <= CDate(CL_Datum) Then
KUNDE.Bonitätsdatum = Today()
End If
End If
KUNDE_ERW.SAVE()
If updateKunden Then KUNDE_ERW.SAVE()
End If
KUNDE.SAVE()
If updateKunden Then KUNDE.SAVE()
If triggerMail AndAlso sendMail Then
VERAG_PROG_ALLGEMEIN.cProgramFunctions.sendMail("as@verag.ag", IIf(VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM, "TEST-", "") & "CREDITSAFE " & KUNDE.KundenNr, "Änderungen der Creditsafe-Daten" & vbNewLine & vbNewLine & vbNewLine & Mailtext.ToString & vbNewLine & vbNewLine & vbNewLine & "*Automatic generated e-mail*",,,,, "d.breimaier@verag.ag")
End If
End If
@@ -657,7 +734,7 @@ Public Class cCreditSafeAPI
saveCR = True
End If
If saveCR Then CR = value
If saveCR AndAlso IsNumeric(value) Then CR = value
Case "CL"
Dim saveCL As Boolean = False
@@ -666,7 +743,7 @@ Public Class cCreditSafeAPI
saveCL = True
End If
If saveCL Then CL = value
If saveCL AndAlso IsNumeric(value) Then CL = value
End Select
@@ -1126,6 +1203,106 @@ Public Class cCreditSafeAPI
End Select
End Function
Shared Sub createInfo(typ As String, kundeErw As cKundenErweitert, kunde As cKunde, newValue As Object, risikoklasse As String, ByRef mailText As String, ByRef triggerMail As Boolean, setzeKundeninfo As Boolean)
Dim createInfo As Boolean = False
If newValue Is Nothing OrElse Not IsNumeric(newValue) Then
Exit Sub
End If
Dim defaultOldValue As Double = -1000000
Dim oldValue As Double = defaultOldValue
Dim oldRiksClass = IIf(Not kundeErw.kde_CreditSaveBonitaetsklasse Is Nothing, kundeErw.kde_CreditSaveBonitaetsklasse, "")
Dim infoAbxProzentVerschlechertung As Double = 25
Dim infoAbxProzentVerschlechertungMailInfo As Double = 50
Dim changedInProzent As Double = 0
Select Case typ
Case "B-INDEX"
oldValue = kundeErw.kde_CreditSaveBonitaetsIndex
'LIMITs DEFINIEREN
If Not (oldValue = defaultOldValue) Then
changedInProzent = calcChange(oldValue, newValue)
End If
'Index höher ist schlechter!!!
If changedInProzent > infoAbxProzentVerschlechertung Or risikoklasse = "E" Or newValue >= 5 Then createInfo = True
If changedInProzent > infoAbxProzentVerschlechertungMailInfo Or risikoklasse = "E" Or newValue >= 5 Then triggerMail = True
Case "B-SCORE"
oldValue = kundeErw.kde_CreditSaveBonitaetsScore
'LIMITs DEFINIEREN
'Score höher ist besser
If Not (oldValue = defaultOldValue) Then
changedInProzent = calcChange(oldValue, newValue)
End If
If changedInProzent > infoAbxProzentVerschlechertung AndAlso oldValue > newValue Or risikoklasse = "E" Then createInfo = True
If changedInProzent > infoAbxProzentVerschlechertungMailInfo AndAlso oldValue > newValue Or risikoklasse = "E" Then triggerMail = True
Case "KREDITLIMIT"
oldValue = kunde.Höchstkredit
If Not (oldValue = defaultOldValue) Then
changedInProzent = calcChange(oldValue, newValue)
End If
'LIMITs DEFINIEREN
If newValue = 0 Then
createInfo = True
triggerMail = True
End If
End Select
If Not createInfo Then Exit Sub
Dim Risk As String = ""
If oldRiksClass <> "" Then
Risk = " Risikoklasse: " & oldRiksClass & " -> " & risikoklasse
End If
Dim textVermerk As String = "ACHTUNG, Änderung des " & typ & " von " & oldValue.ToString & " um " & changedInProzent.ToString("F2") & "% " & " auf " & newValue.ToString & Risk
mailText &= "<br><br>" & textVermerk
If setzeKundeninfo Then
If kundeErw.kde_BesonderheitenNeu Then
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
If SQL.doSQL("INSERT INTO tblKundenBesonderheiten (kdb_KundenNr,kdb_kategorie,kdb_text,kdb_mitId,kdb_mitName,kdb_EingetragenAm,kdb_visible,kdb_hervorheben,kdb_history) " &
" VALUES(" & kunde.KundenNr & ",'ALLG' ,'" & textVermerk & "'," & "4" & ",'" & "AUTO" & "','" & Now() & "',1,1,0)", "FMZOLL") Then
End If
Else
If kunde.Besonderheiten <> "" Then kunde.Besonderheiten &= vbNewLine
kunde.Besonderheiten &= textVermerk
End If
End If
End Sub
Shared Function calcChange(oldValue As Double, newValue As Double)
If oldValue <> 0 Then
Return ((newValue - oldValue) / oldValue) * 100
Else
Return 100
End If
End Function