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

This commit is contained in:
2025-04-28 12:01:39 +02:00
6 changed files with 633 additions and 211 deletions

View File

@@ -1,5 +1,10 @@

Imports iTextSharp.text.pdf
Imports iTextSharp.text.pdf.parser
Imports System.IO
Imports System.Windows.Forms
Public Class cMDMFunctionsAllgemein
Public Shared ploseAlteLogikSchnittstelle As Boolean = False
@@ -139,7 +144,7 @@ Public Class cMDMFunctionsAllgemein
Else
sqlWhere = "in (SELECT DISTINCT tblSteuernummern.AdressenNr AS UStVAn_KuNr
FROM tblSteuernummern
where AdressenNr is not null) "
where AdressenNr is not null) AND Adressen.Auswahl = 'A'"
End If
'alle Kunden, die eine SteuerNr hinterlegt haben inkl. deren hinterlegte Summen!
@@ -791,4 +796,311 @@ Public Class cMDMFunctionsAllgemein
End Function
Shared Function getDaID_OLD(SchnittstellenNr, reDat, reNr, Antrag_LandKz, USTV_ANTRAG)
Dim da_id = -1
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
Select Case If(SchnittstellenNr, -1)
Case 1 : da_id = SQL.getValueTxtBySql("SELECT TOP(1) RK_ID FROM Rechnungsausgang where cast(Rechnungsausgang.RechnungsDatum as Date) ='" & reDat & "' and Rechnungsausgang.RechnungsNr='" & reNr & "' AND FilialenNr = 4814 AND RK_ID is not null", "FMZOLL",,, -1)
'Case 6, 0 : da_id = SQL.getValueTxtBySql("SELECT TOP(1) [plInv_daId] FROM [tblPLOSE_Inv_Data] where plInv_SupplierRechnungsDatum='" & reDat & "' and isnull(plose_RechnungsNr,plInv_SupplierRechnungsNr)='" & reNr & "' and plInv_SupplierCountry='" & Antrag_LandKz & "' AND [plInv_daId] is not null", "FMZOLL",,, -1)
Case 6, 0, 11 : da_id = SQL.getValueTxtBySql("SELECT TOP(1) [plInv_daId] FROM [tblPLOSE_Inv_Data] where plInv_SupplierRechnungsDatum='" & reDat & "' and plInv_SupplierRechnungsNr='" & reNr & "' and plInv_SupplierCountry='" & Antrag_LandKz & "' AND [plInv_daId] is not null", "FMZOLL",,, -1)
Case 4, 9 : da_id = SQL.getValueTxtBySql("SELECT TOP(1) [daId] FROM [tblMSEInvoices] as inv inner join tblMSECustomers on inv.customer_number = customer_id where invoice_date='" & reDat & "' and country='" & Antrag_LandKz & "' AND partner_customer_number = " & USTV_ANTRAG.UStVAn_KuNr & " AND daId is not null", "FMZOLL",,, -1)
Case 10 : da_id = SQL.getValueTxtBySql("SELECT TOP(1) [daId] FROM [tblUTAImportNew] where Rechnungsdatum='" & reDat & "' and Abrechnungsnummer='" & reNr & "' and Lieferland_ISO2='" & Antrag_LandKz & "' AND daId is not null", "FMZOLL",,, -1)
Case 7 : da_id = SQL.getValueTxtBySql("SELECT TOP(1) [rmc_daId] FROM [tblRMCImport] where rmc_reDatum='" & reDat & "' and rmc_reNr='" & reNr & "' and rmc_landKZ='" & Antrag_LandKz & "' AND [rmc_daId] is not null", "FMZOLL",,, -1)
Case 8 : da_id = SQL.getValueTxtBySql("SELECT TOP(1) tblIDSInvoicesNew.daId FROM [tblIDSTransactionsNew] INNER JOIN tbl_IDS_Länder ON tblIDSTransactionsNew.[OutletCountryCode] = tbl_IDS_Länder.OutletCountryCode LEFT JOIN tblIDSInvoicesNew on tblIDSInvoicesNew.CustomerCode = tblIDSTransactionsNew.CustomerCode and tblIDSInvoicesNew.Invoicenumber = Paymentsummarynumber where tblIDSTransactionsNew.[YearMonthDay] ='" & reDat & "' AND ISNULL(tblIDSTransactionsNew.[OBONumber], ISNULL(tblIDSTransactionsNew.[VRNumber], tblIDSTransactionsNew.[Paymentsummarynumber])) ='" & reNr & "' and tbl_IDS_Länder.Lieferland_ISO2='" & Antrag_LandKz & "' AND tblIDSInvoicesNew.daId is not null", "FMZOLL",,, -1)
Case 12 : da_id = SQL.getValueTxtBySql("SELECT TOP(1) tblIDSInvoicesNewSplittedByCountry.daId FROM [tblIDSInvoicesNewSplittedByCountry] where tblIDSInvoicesNewSplittedByCountry.[YearMonthDay] ='" & reDat & "' AND tblIDSInvoicesNewSplittedByCountry.Invoicenumber ='" & reNr.ToString.Replace("/", "") & "' andtblIDSInvoicesNewSplittedByCountry.Country='" & Antrag_LandKz & "' AND tblIDSInvoicesNewSplittedByCountry.daId is not null", "FMZOLL",,, -1)
End Select
Return da_id
End Function
Shared Function getPDF(schnittstellenNr, ReNr, ReDat, daId, nummierung, PDFisProtected, LandKZ, USTVA, cFakturierung, returnDSID) As String
Dim schnnittstellenNr = schnittstellenNr
Dim dsID
If Not IsDBNull(daId) AndAlso IsNumeric(daId) AndAlso daId > 0 Then
dsID = daId
Else
dsID = getDaID_OLD(schnnittstellenNr, ReDat, ReNr, LandKZ, USTVA)
End If
If dsID < 0 Then
Return ""
ElseIf returnDSID Then
If schnittstellenNr = 8 Then 'Nr enthätl alle IDS-Rechnungen, die nicht mitgeben!
Return -1
Else
Return dsID
End If
End If
'Anschrift Nummerierung:
Dim x = 100
Dim y = 10
Dim width = 300
Dim height = 10
Dim mSize = 10
Dim mFont = ""
Select Case schnnittstellenNr
Case 1
If dsID > 0 Then
'Me.Cursor = Cursors.WaitCursor
Dim path As String
cFakturierung.doRechnungsDruck_SRorER(dsID,, False, 4, path)
If nummierung > 0 Then
Dim pdfReader As iTextSharp.text.pdf.PdfReader = New iTextSharp.text.pdf.PdfReader(path)
PdfReader.unethicalreading = True
Dim fm As New VERAG_PROG_ALLGEMEIN.cFormularManager
Dim listTowrite As New List(Of VERAG_PROG_ALLGEMEIN.cPDFWriteValues)
For page As Integer = 1 To pdfReader.NumberOfPages
listTowrite.Add(New VERAG_PROG_ALLGEMEIN.cPDFWriteValues(nummierung, x, y, width, height, mFont, mSize, , iTextSharp.text.Element.ALIGN_LEFT, page))
Next
pdfReader.Close()
Dim PdfTmp = fm.fillPDFVorhandenesLokalesPDF_Path(path, listTowrite, , , , ,)
Return PdfTmp
Else
Return path
End If
End If
Case 8
'Me.Cursor = Cursors.WaitCursor
Dim ds As New VERAG_PROG_ALLGEMEIN.cDATENSERVER(dsID)
Dim path_src As String = ds.OPEN_SINGLE(False)
If path_src = "" Then Return ""
Try
Dim fi As New System.IO.DirectoryInfo(path_src)
Dim pdfReader As iTextSharp.text.pdf.PdfReader = New iTextSharp.text.pdf.PdfReader(path_src)
Dim TMP_Path_New = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath(fi.Name, fi.Extension,, False, "IDS-Rechnungen")
Dim srcDoc As New iTextSharp.text.Document()
Dim PdfCopyProvider As New iTextSharp.text.pdf.PdfCopy(srcDoc, New FileStream(TMP_Path_New, System.IO.FileMode.Create))
PdfCopyProvider.SetFullCompression()
srcDoc.Open()
PdfReader.unethicalreading = True
Dim pages As New List(Of Integer)()
For page As Integer = 1 To pdfReader.NumberOfPages
Dim strategy As ITextExtractionStrategy = New SimpleTextExtractionStrategy()
Dim currentpagetext As String = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy)
Dim searchtext As String = ReNr
Dim impPage As iTextSharp.text.pdf.PdfImportedPage = Nothing
If (currentpagetext.Contains(searchtext)) Then
If page > pdfReader.NumberOfPages Then
MsgBox("Seitenanzahl überschritten!")
srcDoc.Close() : pdfReader.Close()
Return False
End If
Try
impPage = PdfCopyProvider.GetImportedPage(pdfReader, page)
' ----- Ermitteln der Seitenauflösung und setzen für die neue Seite
PdfCopyProvider.SetPageSize(New iTextSharp.text.Rectangle(0.0F, 0.0F, impPage.Width, impPage.Height, pdfReader.GetPageRotation(page)))
' ----- PDF Seite in das neue Dokument einfügen
If impPage IsNot Nothing Then PdfCopyProvider.AddPage(impPage)
Catch ex As Exception
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
End Try
End If
Next
srcDoc.Close()
pdfReader.Close()
If nummierung > 0 Then
Dim pdfReadernNew As iTextSharp.text.pdf.PdfReader = New iTextSharp.text.pdf.PdfReader(TMP_Path_New)
pdfReadernNew.unethicalreading = True
Dim fm As New VERAG_PROG_ALLGEMEIN.cFormularManager
Dim listTowrite As New List(Of VERAG_PROG_ALLGEMEIN.cPDFWriteValues)
For page As Integer = 1 To pdfReadernNew.NumberOfPages
listTowrite.Add(New VERAG_PROG_ALLGEMEIN.cPDFWriteValues(nummierung, x, y - 6, width, height, mFont, mSize, , iTextSharp.text.Element.ALIGN_LEFT, page))
Next
pdfReader.Close()
Dim PdfTmp = fm.fillPDFVorhandenesLokalesPDF_Path(TMP_Path_New, listTowrite, , , , ,)
Return PdfTmp
Else
Return TMP_Path_New
End If
Catch ex As Exception
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
End Try
Case Else
If dsID > 0 Then
'Me.Cursor = Cursors.WaitCursor
Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER(dsID)
If nummierung > 0 Then
'wenn PDF nicht beschreibbar, dann mittels Stamp!
If PDFisProtected Then
Dim tempPathNew = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath(DS.da_name & "_modified", ".pdf", True, False, "USTVA")
Dim pdfReader As iTextSharp.text.pdf.PdfReader = New iTextSharp.text.pdf.PdfReader(DS.GET_TOP1_PATH)
PdfReader.unethicalreading = True
Dim fs = New FileStream(tempPathNew, FileMode.Create, FileAccess.Write, FileShare.None)
Dim stamper = New PdfStamper(pdfReader, fs)
For page As Integer = 1 To pdfReader.NumberOfPages
Dim canvas As PdfContentByte = stamper.GetOverContent(page)
Dim bf As BaseFont = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED)
canvas.SetFontAndSize(bf, 12)
canvas.BeginText()
'The origin (0,0) is at the bottom-left corner of the page and represent coordinates in points!!!!!
Dim _height = pdfReader.GetPageSizeWithRotation(page).GetTop(25) 'oberer Rand
Dim _width = pdfReader.GetPageSizeWithRotation(page).GetRight(0) / 2 'Mitte
canvas.ShowTextAligned(PdfContentByte.ALIGN_CENTER, nummierung, _width, _height, 0)
'canvas.ShowTextAligned(PdfContentByte.ALIGN_CENTER, nummierung, 350, 550, 0)
canvas.EndText()
'listTowrite.Add(New VERAG_PROG_ALLGEMEIN.cPDFWriteValues(nummierung, x, y, width, height, mFont, mSize, , itextsharp.text.Element.ALIGN_LEFT, page))
Next
stamper.Close()
pdfReader.Close()
Return tempPathNew
Else
Dim pdfReader As iTextSharp.text.pdf.PdfReader = New iTextSharp.text.pdf.PdfReader(DS.GET_TOP1_PATH)
Dim fm As New VERAG_PROG_ALLGEMEIN.cFormularManager
Dim listTowrite As New List(Of VERAG_PROG_ALLGEMEIN.cPDFWriteValues)
For page As Integer = 1 To pdfReader.NumberOfPages
listTowrite.Add(New VERAG_PROG_ALLGEMEIN.cPDFWriteValues(nummierung, x, y, width, height, mFont, mSize, , iTextSharp.text.Element.ALIGN_LEFT, page))
Next
pdfReader.Close()
Dim PdfTmp = fm.fillPDFVorhandenesLokalesPDF_Path(DS.GET_TOP1_PATH, listTowrite, , , , ,)
Return PdfTmp
End If
Else
Return DS.GET_TOP1_PATH
End If
End If
End Select
End Function
Shared Function generateExcelPosList(USTV_ANTRAG As cUSTVAntrag, posId As String, Antrag_LandKz As String, SteuerNR As String, openFile As Boolean) As String
Dim sql As New SQL
Dim sqlWHere = ""
If posId <> "" Then
sqlWHere = " And UStVPo_ID in(" & posId & ")"
End If
Dim StringSQL = "SELECT [UStVPo_ID] as Number ,[UStVPo_ReDat] as 'Date of Invoice',[UStVPo_ReNr] as 'Number of invoice' ,[UStVPo_Leistungsbezeichnung] as 'Name of service',[UStVPo_Leistender] as 'Name of supplier',leist.[UstV_Leistender_Strasse] + ' ' + leist.[UstV_Leistender_StrasseNr] as Street,
leist.[UstV_Leistender_PLZ] as 'ZIP-Code',leist.[UstV_Leistender_Stadt] as City,leist.[UstV_Leistender_Land] as Country,leist.[UstV_Leistender_UstNr] as VAT,[UStVPo_USteuerbetrag] as 'Amount of tax refund'
FROM [tblUStVPositionen]
LEFT JOIN [tblUStVLeistender] as leist
ON ([tblUStVPositionen].[UStVPo_LeistenderId] > 0
AND leist.[UStV_LeistenderId] = [tblUStVPositionen].[UStVPo_LeistenderId])
OR ([tblUStVPositionen].[UStVPo_LeistenderId] <= 0
AND leist.[UStV_Leistender] = [tblUStVPositionen].[UStVPo_Leistender])
where UStVAn_ID=" & USTV_ANTRAG.UStVAn_ID & sqlWHere & " ORDER BY UStVPo_ID"
Dim dtNew As DataTable = sql.loadDgvBySql(StringSQL, "FMZOLL")
If dtNew IsNot Nothing AndAlso dtNew.Rows.Count > 0 Then
Dim sumVAT As Double = 0
For Each row In dtNew.Rows
If Not IsDBNull(row("Amount of tax refund")) AndAlso IsNumeric(row("Amount of tax refund")) Then sumVAT += CDbl(row("Amount of tax refund"))
If Not IsDBNull(row("Amount of tax refund")) AndAlso IsNumeric(row("Amount of tax refund")) Then row("Amount of tax refund") = CDbl(row("Amount of tax refund"))
If Not IsDBNull(row("Name of supplier")) AndAlso row("Name of supplier") <> "" AndAlso Not IsDBNull(row("VAT")) AndAlso row("VAT") <> "" Then
row("Name of supplier") = row("Name of supplier").ToString.Replace(" " & row("VAT").ToString.Substring(0, 2), "")
End If
Next
Dim drLast = dtNew.NewRow
If dtNew.Columns.Contains("Number") Then drLast.Item("Number") = dtNew.Rows.Count + 1
If dtNew.Columns.Contains("Date of Invoice") Then drLast.Item("Date of Invoice") = DBNull.Value
If dtNew.Columns.Contains("Number of invoice") Then drLast.Item("Number of invoice") = DBNull.Value
If dtNew.Columns.Contains("Amount of tax refund") Then drLast.Item("Amount of tax refund") = sumVAT
If dtNew.Columns.Contains("Name of supplier") Then drLast.Item("Name of supplier") = DBNull.Value
If dtNew.Columns.Contains("Street") Then drLast.Item("Street") = DBNull.Value
If dtNew.Columns.Contains("City") Then drLast.Item("City") = DBNull.Value
If dtNew.Columns.Contains("Country") Then drLast.Item("Country") = DBNull.Value
If dtNew.Columns.Contains("ZIP-Code") Then drLast.Item("ZIP-Code") = DBNull.Value
If dtNew.Columns.Contains("VAT") Then drLast.Item("VAT") = "SUM"
If dtNew.Columns.Contains("Name of service") Then drLast.Item("Name of service") = DBNull.Value
dtNew.Rows.InsertAt(drLast, dtNew.Rows.Count)
Dim header1 As String = ""
Dim header2 As String = ""
Dim AD As New cAdressen(USTV_ANTRAG.UStVAn_KuNr)
If Antrag_LandKz <> "" AndAlso SteuerNR <> "" Then
header1 = "Statement itemising VAT amounts relating to the period covered by this application"
header2 = "VAT NO.: " & USTV_ANTRAG.UStVAn_Steuernummer & " " & "Name/Company: " & AD.Name_1 & " " & AD.Name_2 & " " & "VAT in " & Antrag_LandKz & ": " & SteuerNR
End If
Return cProgramFunctions.genExcelFromDT_NEW_(dtNew, {"K4:K" & (dtNew.Rows.Count + 1)},, header1, header2, IIf(USTV_ANTRAG.UStVAn_Währungscode = "EUR", "", ""), True, "J", True,, openFile)
End If
End Function
End Class

View File

@@ -354,6 +354,91 @@ BindingFlags.Instance Or BindingFlags.NonPublic, Nothing, [Control], New Object(
End Try
End Function
Public Shared Function genExcelFromDT_NEW_(dt As DataTable, Optional rangeAsWaehrung() As String = Nothing, Optional ShowAutoFilter As Boolean = True, Optional HeaderTxt As String = "", Optional HeaderTxt2 As String = "", Optional waehrungsZeichen As String = "", Optional fitCellsToContent As Boolean = False, Optional mergeHeadersToCell As Char = "", Optional Landscape As Boolean = False, Optional fitToOnePage As Boolean = False, Optional openFile As Boolean = True) As String
Try
Dim sPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Personal) & "\VERAG\SDL\tmp\" ' My.Computer.FileSystem.GetTempFileName
If Not My.Computer.FileSystem.DirectoryExists(sPath) Then
My.Computer.FileSystem.CreateDirectory(sPath)
End If
Dim wb As New XLWorkbook
' Dim dt As DataTable = (dgv.DataSource)
' Dim dt As DataTable = TryCast(dgv., DataTable)
wb.Worksheets.Add(dt, "DATEN")
wb.Worksheets(0).Tables.FirstOrDefault().ShowAutoFilter = ShowAutoFilter
If rangeAsWaehrung IsNot Nothing Then
For Each r In rangeAsWaehrung
Try
wb.Worksheets(0).Range(r).Style.NumberFormat.SetFormat("###,###,##0.00 " & waehrungsZeichen)
Catch ex As Exception
MsgBox(ex.Message & ex.StackTrace)
End Try
Next
End If
If HeaderTxt <> "" Then
wb.Worksheets(0).FirstRow.InsertRowsAbove(2)
wb.Worksheets(0).Range("A1").Value = HeaderTxt
wb.Worksheets(0).Range("A1").Style.Font.Bold = True
If mergeHeadersToCell <> "" Then
wb.Worksheets(0).Range("A1:" & mergeHeadersToCell & "1").Merge()
wb.Worksheets(0).Range("A1:" & mergeHeadersToCell & "1").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center
wb.Worksheets(0).Range("A1:" & mergeHeadersToCell & "1").Style.Alignment.Vertical = XLAlignmentVerticalValues.Center
wb.Worksheets(0).Range("A1:" & mergeHeadersToCell & "1").Style.Alignment.WrapText = True
End If
If HeaderTxt2 <> "" Then
wb.Worksheets(0).Range("A2").Value = HeaderTxt2
wb.Worksheets(0).Row(2).InsertRowsBelow(1)
If mergeHeadersToCell <> "" Then
wb.Worksheets(0).Range("A2:" & mergeHeadersToCell & "2").Merge()
wb.Worksheets(0).Range("A2:" & mergeHeadersToCell & "2").Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center
wb.Worksheets(0).Range("A2:" & mergeHeadersToCell & "2").Style.Alignment.Vertical = XLAlignmentVerticalValues.Center
wb.Worksheets(0).Range("A2:" & mergeHeadersToCell & "2").Style.Alignment.WrapText = True
End If
End If
End If
If fitCellsToContent Then
wb.Worksheets(0).Columns().AdjustToContents()
wb.Worksheets(0).Rows().AdjustToContents()
End If
If Landscape Then
wb.Worksheets(0).PageSetup.PageOrientation = XLPageOrientation.Landscape
Else
wb.Worksheets(0).PageSetup.PageOrientation = XLPageOrientation.Default
End If
If fitToOnePage Then
wb.Worksheets(0).PageSetup.PagesWide = 1 ' In die Breite auf eine Seite anpassen
wb.Worksheets(0).PageSetup.PagesTall = 1 ' In die Höhe auf eine Seite anpassen
End If
Dim filename As String = sPath & "tmp_" & Now.ToString("ddMMyyyyHHmmss") & ".xlsx"
wb.SaveAs(filename)
If openFile Then Process.Start(filename)
Return filename
Catch ex As Exception
MsgBox(ex.Message & ex.StackTrace)
Return Nothing
End Try
End Function
Public Shared Function sendMail(eMailTo, betreff, text, Optional eMailfrom = "support@verag.ag", Optional prio = False, Optional uhrzeitAngeben = True, Optional cc = "", Optional bcc = "", Optional anhaenge = Nothing, Optional art = 0)
Dim Msg As New MailMessage
Dim myCredentials As New System.Net.NetworkCredential