From c717b3278a741c77a6937151847d42fd828cdff2 Mon Sep 17 00:00:00 2001 From: "d.breimaier" Date: Thu, 10 Sep 2026 11:53:56 +0200 Subject: [PATCH] Datenserver, faktmail, a --- SDL/Fakturierung/cAutomailversand.vb | 2 +- SDL/Fakturierung/cFakturierung.vb | 4 +- SDL/Fakturierung/frmAbrechnungsMaske.vb | 256 +++++++++++++++++- SDL/Fakturierung/frmFaktEmail.vb | 4 +- .../DATENSERVER/cDATENSERVER.vb | 28 +- 5 files changed, 271 insertions(+), 23 deletions(-) diff --git a/SDL/Fakturierung/cAutomailversand.vb b/SDL/Fakturierung/cAutomailversand.vb index 4a69234c..767c9e86 100644 --- a/SDL/Fakturierung/cAutomailversand.vb +++ b/SDL/Fakturierung/cAutomailversand.vb @@ -1414,7 +1414,7 @@ Public Class cAutomailversand End Function - Private Function setAccountToSend(FIRMA_ID As Integer) As String + Public Function setAccountToSend(FIRMA_ID As Integer) As String Dim tmpFirma = New VERAG_PROG_ALLGEMEIN.cFirmen(FIRMA_ID) diff --git a/SDL/Fakturierung/cFakturierung.vb b/SDL/Fakturierung/cFakturierung.vb index d5592d46..63659f44 100644 --- a/SDL/Fakturierung/cFakturierung.vb +++ b/SDL/Fakturierung/cFakturierung.vb @@ -4466,16 +4466,18 @@ Public Class cFakturierung End Function - Public Shared Function doSAMMELRechnungsDruck_Abschnitt(ByRef RechnungsNr As Integer, Firma_ID As Integer, Buchungsjahr As Integer, DruckdatumUhrzeit As DateTime, PrinterName As String, Optional AnlageEinzelRg As Boolean = True, Optional Sammelrechnungsbericht As Boolean = True, Optional RechnungsdruckArt As Integer = -1, Optional ByRef pathPDF As String = "", Optional SRDruckWiederholen As Boolean = False, Optional SB As String = "", Optional AnlageExcelEvolog As Boolean = False, Optional ByRef SonstAnlagen As List(Of String) = Nothing, Optional VorschauID As String = "", Optional AnlageExcelTransferry360 As Boolean = False, Optional FakturierungsGruppe As String = "", Optional Abfertigungsart As String = "", Optional mergePDF As Boolean = False, Optional RechnungsanhangPDF As Boolean = False, Optional RechnugnskopieMDMSammelrechnung As Boolean = False, Optional AnhList As List(Of String) = Nothing, Optional RechnungsanhangCSV As Boolean = False, Optional onlyAsfinagAnhang As Boolean = False, Optional saveInTherefore As Boolean = True) As Boolean + Public Shared Function doSAMMELRechnungsDruck_Abschnitt(ByRef RechnungsNr As Integer, Firma_ID As Integer, Buchungsjahr As Integer, DruckdatumUhrzeit As DateTime, PrinterName As String, Optional AnlageEinzelRg As Boolean = True, Optional Sammelrechnungsbericht As Boolean = True, Optional RechnungsdruckArt As Integer = -1, Optional ByRef pathPDF As String = "", Optional SRDruckWiederholen As Boolean = False, Optional SB As String = "", Optional AnlageExcelEvolog As Boolean = False, Optional ByRef SonstAnlagen As List(Of String) = Nothing, Optional VorschauID As String = "", Optional AnlageExcelTransferry360 As Boolean = False, Optional FakturierungsGruppe As String = "", Optional Abfertigungsart As String = "", Optional mergePDF As Boolean = False, Optional RechnungsanhangPDF As Boolean = False, Optional RechnugnskopieMDMSammelrechnung As Boolean = False, Optional AnhList As List(Of String) = Nothing, Optional RechnungsanhangCSV As Boolean = False, Optional onlyAsfinagAnhang As Boolean = False, Optional saveInTherefore As Boolean = True, Optional dt_temp As DataTable = Nothing) As Boolean 'SB Nicht mehr benötigt, da RG-Nr und DruckdatumUhrzeit Dim dt As DataTable If SRDruckWiederholen Then dt = getSAMMELRechnung_Dt(RechnungsNr, DruckdatumUhrzeit, "3,4,5", ) ' 3,4,5-_> irgendebbs + dt_temp = dt Else 'Dim RG_NR = New VERAG_PROG_ALLGEMEIN.cRechnungsnummern(Firma_ID, Buchungsjahr) 'RG_NR.INCREASE_RGNR() 'für die nächste Rechnung dt = getSAMMELRechnung_Dt(RechnungsNr, DruckdatumUhrzeit, IIf(RechnungsdruckArt = 7, "2", "2, 3, 4"), [VorschauID]) + dt_temp = dt End If ' 3-_> Anlagen gedruckt diff --git a/SDL/Fakturierung/frmAbrechnungsMaske.vb b/SDL/Fakturierung/frmAbrechnungsMaske.vb index d8cd4f83..e15174be 100644 --- a/SDL/Fakturierung/frmAbrechnungsMaske.vb +++ b/SDL/Fakturierung/frmAbrechnungsMaske.vb @@ -1,6 +1,8 @@ Imports System.IO Imports GrapeCity.ActiveReports.PageReportModel +Imports iText.IO.Util Imports Microsoft.Office.Interop +Imports sun.net.www.protocol Imports VERAG_PROG_ALLGEMEIN Public Class frmAbrechnungsMaske @@ -62,13 +64,13 @@ Public Class frmAbrechnungsMaske txtRechnungsdatumAutomail.Visible = setDefaultAutoMailversand - dtp_RD_automail.Visible = setDefaultAutoMailversand - lblRechnungsdatumAUTOMAIL.Visible = setDefaultAutoMailversand + dtp_RD_automail.Visible = setDefaultAutoMailversand + lblRechnungsdatumAUTOMAIL.Visible = setDefaultAutoMailversand - 'FirmaTmp = "AMBAR" + 'FirmaTmp = "AMBAR" - cboSachbearbeiter.Items.Clear() + cboSachbearbeiter.Items.Clear() Select Case FirmaTmp @@ -918,15 +920,17 @@ Public Class frmAbrechnungsMaske If IsNumeric(RK_ID) Then Dim RG_TMP As New VERAG_PROG_ALLGEMEIN.cRechnungsausgang(RK_ID) Dim sammelrechnungskopieMDM As Boolean = False - Dim sammelrechnungMDMmitAnhang As Boolean = False + Dim sammelrechnungmitAnhang As Boolean = False If RG_TMP IsNot Nothing Then - 'id mitübergeben (1_> drucken, 2 Email, 3 PDF) + + Dim tempPDF As String = "" + Dim listOfCSV As New List(Of String) + If RG_TMP.Sammelrechnung = 6 Then If RG_TMP.Status = 4 Then sammelrechnungskopieMDM = True - Dim tempPDF As String = "" - Dim listOfCSV As New List(Of String) - sammelrechnungMDMmitAnhang = MsgBox("Soll die MDM Sammelrechnung mit Anhang angezeigt werden?", vbYesNoCancel) - cFakturierung.doSAMMELRechnungsDruck_Abschnitt(RG_TMP.RechnungsNr, -1, -1, RG_TMP.DruckDatumZeit, "", False, True, 8, tempPDF, True,,,,,,,,, sammelrechnungMDMmitAnhang, sammelrechnungskopieMDM, listOfCSV, True) + + sammelrechnungmitAnhang = MsgBox("Soll die MDM Sammelrechnung mit Anhang angezeigt werden?", vbYesNo) + cFakturierung.doSAMMELRechnungsDruck_Abschnitt(RG_TMP.RechnungsNr, -1, -1, RG_TMP.DruckDatumZeit, "", False, True, 8, tempPDF, True,,,,,,,,, sammelrechnungmitAnhang, sammelrechnungskopieMDM, listOfCSV, True) Select Case id Case 1 @@ -957,16 +961,246 @@ Public Class frmAbrechnungsMaske Else - cFakturierung.doSAMMELRechnungsDruck_Abschnitt(RG_TMP.RechnungsNr, -1, -1, RG_TMP.DruckDatumZeit, "", False, True, id,, True,,,,,,,,,) + + 'sammelrechnungmitAnhang = MsgBox("Soll die Sammelrechnung mit Anhang angezeigt werden?", vbYesNo) + + + Select Case id + Case 1 + cFakturierung.doSAMMELRechnungsDruck_Abschnitt(RG_TMP.RechnungsNr, -1, -1, RG_TMP.DruckDatumZeit, "", False, True, 3, tempPDF, True,,,,,,,, True, sammelrechnungmitAnhang,,) + Case 2 + Try + Dim dt_temp As New DataTable + cFakturierung.doSAMMELRechnungsDruck_Abschnitt(RG_TMP.RechnungsNr, -1, -1, RG_TMP.DruckDatumZeit, "", False, True, 4, tempPDF, True,,,,,,,, True, sammelrechnungmitAnhang,, listOfCSV,,,, dt_temp) + + + Dim AD = New VERAG_PROG_ALLGEMEIN.cAdressen(RG_TMP.RechnungsKundenNr) + + Dim outl As New Outlook.Application + Dim Mail As Microsoft.Office.Interop.Outlook.MailItem + Mail = outl.CreateItem(0) + Dim auto As New cAutomailversand + Dim oAccount As Outlook.Account + Dim accountToSent = "" + + accountToSent = auto.setAccountToSend(RG_TMP.Firma_ID) + + If accountToSent <> "" Then + If outl.Session.Accounts.Count > 0 Then + For Each oAccount In outl.Session.Accounts + If oAccount.SmtpAddress.ToLower = accountToSent.ToLower Then + Mail.SendUsingAccount = oAccount + Exit For + End If + Next + End If + End If + + setEmailText(RG_TMP.RechnungsLandKz, RG_TMP.Firma_ID, RG_TMP.RechnungsNr, Mail.Subject, Mail.HTMLBody, RG_TMP.Sammelrechnung, RG_TMP.BelegartenNr) + setandcheckEmpfaengerMail_SR(dt_temp, AD, Mail.To, Mail.CC, Mail.BCC, RG_TMP.Firma_ID, RG_TMP.Sammelrechnung) + Dim anhangbezeichnung = getAnhangbezeichnung(AD.LandKz, RG_TMP, RG_TMP.BelegartenNr) + Mail.Attachments.Add(tempPDF, Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue, , RG_TMP.RechnungsNr & "_" & anhangbezeichnung) + If listOfCSV.Count > 0 Then + For Each r In listOfCSV + Dim file As New FileInfo(r) + Mail.Attachments.Add(r, Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue, , file.Name) + Next + End If + Mail.Display() + + Catch ex As Exception + MsgBox("Fehler bim Öffnen des Mail-Programmes. PDF wird geladen!") + Process.Start(tempPDF) + End Try + + Case 3 'PDF + öffnen + cFakturierung.doSAMMELRechnungsDruck_Abschnitt(RG_TMP.RechnungsNr, -1, -1, RG_TMP.DruckDatumZeit, "", False, True, 4, tempPDF, True,,,,,,,, True, sammelrechnungmitAnhang,,) + Process.Start(tempPDF) + + End Select + + + + + End If End If + Else + + MsgBox("Bei " & cboFirma.SelectedItem.Text & " existiert keine Sammelrechnung mit der Nr: " & SR_RechnungsNr & "") + End If + + + End If End Sub + + + + Private Sub setEmailText(RechnungsLandKz As String, Firma_ID As Integer, RechnungsNr As Integer, ByRef Subject As String, ByRef TextHTML As String, ByRef SammelrechungArt As Integer, ByRef BelegartenNr As Integer) + + Dim txtRgNr As String = IIf(RechnungsNr < 0, -1, RechnungsNr) + Dim Mailtext As String + + Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL + Dim listOfTextconserven As cTextkonserve_LIST = New cTextkonserve_LIST(4, "", Firma_ID) + + Dim spracheRechnung As String = "EN" 'Defaultsprache + + Dim belegtyp As String = If(BelegartenNr = 71, "credit note", "invoice") + + + + Select Case RechnungsLandKz + Case "TR" : spracheRechnung = "TR" : spracheRechnung = RechnungsLandKz : belegtyp = If(BelegartenNr = 71, "Kredi", "Fatura") + Case "RO" + If Firma_ID = 19 Then + spracheRechnung = "RO" : spracheRechnung = RechnungsLandKz : belegtyp = If(BelegartenNr = 71, "nota de credit", "factura") + End If + + Case "DE", "A", "AT", "D", "CH" : spracheRechnung = "DE" : belegtyp = If(BelegartenNr = 71, "Gutschrift", "Rechnung") + + Case "SRB", "HR", "SLO", "BIH", "MNE", "MK", "MO" + If Firma_ID = 19 Then + spracheRechnung = "SRB" : belegtyp = If(BelegartenNr = 71, "credit note", "invoice") 'Belegarten auf Englisch! + End If + + End Select + + + + If listOfTextconserven.LIST.Any(Function(c) c.txt_sprache = spracheRechnung) Then + + + Dim r As cTextkonserve = listOfTextconserven.LIST.Find(Function(c) c.txt_sprache = spracheRechnung) + If r IsNot Nothing Then + Subject = r.txt_betreff + Subject = Subject.Replace("%BelegNr%", txtRgNr) + Subject = Subject.Replace("%Belegtyp%", belegtyp) + TextHTML &= r.txt_text + If Mailtext <> "" Then TextHTML &= Mailtext + TextHTML &= vbNewLine & vbNewLine + + TextHTML = TextHTML.Replace("%Belegtyp%", belegtyp) + + + + End If + End If + + TextHTML &= "
" + TextHTML &= "
" + + Select Case RechnungsLandKz + Case "TR" + TextHTML &= "Saygilarimizla
" + Case "A", "AT", "D", "DE", "CH" + TextHTML &= "Mit freundlichen Grüßen
" + Case Else + TextHTML &= "Best regards
" + End Select + + + + TextHTML &= VERAG_PROG_ALLGEMEIN.cAllgemein.USRNAME & "

" + TextHTML &= cFakturierung.getSignature(RechnungsLandKz, Firma_ID, True, True,,,,,, True) + + + + + + End Sub + + Private Function getAnhangbezeichnung(sprache As String, RECHNUNG As cRechnungsausgang, BelegartenNr As Integer, Optional onlyBelegsuebersetzung As Boolean = False) + + Dim Anhangsbez = "" + If RECHNUNG IsNot Nothing Then + + Select Case sprache + Case "A", "AT", "D", "DE", "CH" + + If BelegartenNr = 71 Then + If onlyBelegsuebersetzung Then + Anhangsbez = "Gutschrift.pdf" + Else + Anhangsbez = "Gutschriftsanhaenge.pdf" + End If + Else + If onlyBelegsuebersetzung Then + Anhangsbez = "Rechnung.pdf" + Else + Anhangsbez = "Rechnungsanhaenge.pdf" + End If + End If + + Case "TR" : If BelegartenNr = 71 Then Anhangsbez = "Kredi.pdf" Else Anhangsbez = "Fatura.pdf" + Case Else : If BelegartenNr = 71 Then Anhangsbez = "Creditnote.pdf" Else Anhangsbez = "Invoice.pdf" + End Select + + Else + + + Select Case sprache + Case "A", "AT", "D", "DE", "CH" : If BelegartenNr = 71 Then Anhangsbez = "Sammelgutschrift.pdf" Else Anhangsbez = "Sammelrechnung.pdf" + Case "TR" : If BelegartenNr = 71 Then Anhangsbez = "Toplukredi.pdf" Else Anhangsbez = "Toplufatura.pdf" + Case Else : If BelegartenNr = 71 Then Anhangsbez = "Collectivecreditnote.pdf" Else Anhangsbez = "Collectiveinvoice.pdf" + End Select + + End If + + Return Anhangsbez + + + End Function + + Public Shared Function setandcheckEmpfaengerMail_SR(ByRef SR_DT As DataTable, ByRef AD As cAdressen, ByRef EMAILTMP As String, ByRef EMAILTMPCC As String, ByRef EMAILTMPBCC As String, ByRef FirmaID As Integer, ByRef SammelrechungArt As String) As String + + If SammelrechungArt <> 6 Then + + + Dim email_receipt As String = "" + + Dim allAtilla = IIf(FirmaID = 7, True, False) + If SR_DT IsNot Nothing AndAlso SR_DT.Rows.Count > 0 Then + For Each r In SR_DT.Rows + If "4801" <> r("FilialenNr") And "4802" <> r("FilialenNr") Then + allAtilla = False + Exit For + End If + Next + End If + + email_receipt = IIf(allAtilla, VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdress(AD.AdressenNr, "Rechnung an (ATILLA)"), "") + + EMAILTMP = IIf(email_receipt = "", VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdress(AD.AdressenNr, "Rechnung an"), email_receipt) 'VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdress(AD.AdressenNr, "Rechnung an") + EMAILTMPCC = IIf(email_receipt = "", VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdressCC(AD.AdressenNr, "Rechnung an"), VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdressCC(AD.AdressenNr, "Rechnung an (ATILLA)")) + EMAILTMPBCC = IIf(email_receipt = "", VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdressBCC(AD.AdressenNr, "Rechnung an"), VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdressBCC(AD.AdressenNr, "Rechnung an (ATILLA)")) + + Else + + If AD.E_Mail IsNot Nothing AndAlso AD.E_Mail <> "" Then EMAILTMP &= AD.E_Mail & ";" + If AD.E_Mail2 IsNot Nothing AndAlso AD.E_Mail2 <> "" Then EMAILTMP &= AD.E_Mail2 & ";" + + + End If + + If EMAILTMP = "" And EMAILTMPCC = "" And EMAILTMPBCC = "" Then + + If AD.E_Mail IsNot Nothing AndAlso AD.E_Mail <> "" Then EMAILTMP &= AD.E_Mail & ";" + If AD.E_Mail2 IsNot Nothing AndAlso AD.E_Mail2 <> "" Then EMAILTMP &= AD.E_Mail2 & ";" + + End If + + + Return EMAILTMP & EMAILTMPCC + + End Function + Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click Dim f As New frmFaktAufschubSuche(False) f.Show(Me) diff --git a/SDL/Fakturierung/frmFaktEmail.vb b/SDL/Fakturierung/frmFaktEmail.vb index f3d5089f..bc8046d9 100644 --- a/SDL/Fakturierung/frmFaktEmail.vb +++ b/SDL/Fakturierung/frmFaktEmail.vb @@ -195,7 +195,9 @@ Public Class frmFaktEmail If RECHNUNG.FilialenNr = "4801" Or RECHNUNG.FilialenNr = "4802" Then email_receipt = VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdress(AD.AdressenNr, "Rechnung an (ATILLA)") End If - + If Firma_ID = 24 Then + cbxMergeRg.Checked = False + End If Dim EMAILTMP = "" Dim EMAILTMPCC = "" diff --git a/VERAG_PROG_ALLGEMEIN/DATENSERVER/cDATENSERVER.vb b/VERAG_PROG_ALLGEMEIN/DATENSERVER/cDATENSERVER.vb index 0a8d9ecd..53c4a512 100644 --- a/VERAG_PROG_ALLGEMEIN/DATENSERVER/cDATENSERVER.vb +++ b/VERAG_PROG_ALLGEMEIN/DATENSERVER/cDATENSERVER.vb @@ -2428,17 +2428,27 @@ Public Class DATENVERVER_OPTIONS kdnr_path = kdnr End If If kategorie <> "" Then - Dim dir = "" - dir &= rootDir - dir &= kategorie & "\" - dir &= If(ordner IsNot Nothing AndAlso ordner <> "", ordner & "\", "") - dir &= If(kdnr_path <> "", kdnr_path & "\", "") - dir &= If(da_uOrdner1 IsNot Nothing AndAlso da_uOrdner1 <> "", da_uOrdner1 & "\", "") - dir &= If(da_uOrdner2 IsNot Nothing AndAlso da_uOrdner2 <> "", da_uOrdner2 & "\", "") - dir &= If(da_uOrdner3 IsNot Nothing AndAlso da_uOrdner3 <> "", da_uOrdner3 & "\", "") + Dim dir As String = Path.Combine( + rootDir, + kategorie, + If(String.IsNullOrWhiteSpace(ordner), "", ordner), + If(String.IsNullOrWhiteSpace(kdnr_path), "", kdnr_path), + If(String.IsNullOrWhiteSpace(da_uOrdner1), "", da_uOrdner1), + If(String.IsNullOrWhiteSpace(da_uOrdner2), "", da_uOrdner2), + If(String.IsNullOrWhiteSpace(da_uOrdner3), "", da_uOrdner3)) If Not onlyordner Then If Not System.IO.Directory.Exists(dir) Then - System.IO.Directory.CreateDirectory(dir) + Try + If Not Directory.Exists(dir) Then + Directory.CreateDirectory(dir) + End If + + Catch ex As UnauthorizedAccessException + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, "Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & "Keine Berechtigung für den Ordner: " & dir & Environment.NewLine & "Windows-Benutzer: " & System.Security.Principal.WindowsIdentity.GetCurrent().Name & vbNewLine & vbNewLine & ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + + Catch ex As IOException + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, "Fehler beim Zugriff auf den Ordner: " & dir & vbNewLine & vbNewLine & ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try End If Dim zusatz = "" : Dim zusatzcnt = 1 While System.IO.File.Exists(dir & dateiName & zusatz & If(bezeichnung.ToString.EndsWith(endung), "", endung))