fremdrechnungen, etc.

This commit is contained in:
2025-10-22 16:20:51 +02:00
parent 0eb68d12d9
commit 7e9f2ced11

View File

@@ -79,10 +79,12 @@ Public Class usrcntlFremdrechnungen
KUNDE = kundenSQL.getKundeByKdNr(kdNr) KUNDE = kundenSQL.getKundeByKdNr(kdNr)
dtkeineMWST = (New SQL).loadDgvBySql("select Land, Erstattungsland, Lieferant from tblKeineMWSTErstattung", "FMZOLL") dtkeineMWST = (New SQL).loadDgvBySql("select Land, Erstattungsland, Lieferant from tblKeineMWSTErstattung", "FMZOLL")
If KUNDE IsNot Nothing Then If KUNDE.KundenNr > 0 Then
dtKundeMWST = (New SQL).loadDgvBySql("select LandKz from tblKundenMWST where KdNr = " & KUNDE.KundenNr, "FMZOLL") dtKundeMWST = (New SQL).loadDgvBySql("select LandKz from tblKundenMWST where KdNr = " & KUNDE.KundenNr, "FMZOLL")
cbx.Visible = True
End If End If
SET_SDL("") SET_SDL("")
dgvInitWait = False dgvInitWait = False
@@ -211,7 +213,6 @@ Public Class usrcntlFremdrechnungen
aktLieferant = SDLNrTmp aktLieferant = SDLNrTmp
Dim anzahlTop = 1000 Dim anzahlTop = 1000
Dim sqlfehlendePDF As String = "" Dim sqlfehlendePDF As String = ""
Dim sqlfehlendePDF_PLOSE As String = "" Dim sqlfehlendePDF_PLOSE As String = ""
@@ -367,6 +368,7 @@ Public Class usrcntlFremdrechnungen
Private Function setSQLWhere(aktLieferant As String, land As String) As String Private Function setSQLWhere(aktLieferant As String, land As String) As String
'das hier geht (aktuell) nur PRO KUNDE -> ALSO nicht in der Gesamtübersicht!!!!!!!!
Dim SQLWhere = " between '" & dat_Sum_Von.Value.ToShortDateString & "' and '" & dat_Sum_Bis.Value.ToShortDateString & "'" Dim SQLWhere = " between '" & dat_Sum_Von.Value.ToShortDateString & "' and '" & dat_Sum_Bis.Value.ToShortDateString & "'"
@@ -451,6 +453,8 @@ Public Class usrcntlFremdrechnungen
Private Function setSQLDetailWhere(aktLieferant As String, land As String, Optional alle As Boolean = False) As String Private Function setSQLDetailWhere(aktLieferant As String, land As String, Optional alle As Boolean = False) As String
'das hier ist nur PRO KUNDE möglich!!!
Dim SQLWhere = "" Dim SQLWhere = ""
If cbx.Checked AndAlso KUNDE IsNot Nothing Then If cbx.Checked AndAlso KUNDE IsNot Nothing Then
@@ -704,9 +708,6 @@ Public Class usrcntlFremdrechnungen
Private Sub Button4_Click_1(sender As Object, e As EventArgs) Handles Button4.Click Private Sub Button4_Click_1(sender As Object, e As EventArgs) Handles Button4.Click
If SplitContainer1.Panel2Collapsed Then If SplitContainer1.Panel2Collapsed Then
SplitContainer1.Panel2Collapsed = False SplitContainer1.Panel2Collapsed = False
@@ -788,7 +789,7 @@ Public Class usrcntlFremdrechnungen
If groups.Count > 0 Then If groups.Count > 0 Then
If Not vbYes = MsgBox("Möchten Sie die Rechnungen von " & groups.Count & " Kunden per Mail verschicken? " & IIf(Not cbxMailoeffnen.Checked, vbNewLine & "Die Mails werden sofort verschickt!", ""), vbYesNoCancel) Then If Not vbYes = MsgBox("Möchten Sie die Rechnungen von " & groups.Count & " Kunden per Mail verschicken? " & IIf(Not cbxMailoeffnen.Checked, vbNewLine & "Die Mails werden sofort ohne Dialogfeld verschickt!", ""), vbYesNoCancel) Then
Exit Sub Exit Sub
End If End If
@@ -797,6 +798,127 @@ Public Class usrcntlFremdrechnungen
Dim TextHTMLtable = "" Dim TextHTMLtable = ""
Dim pdflist = createEMailTable(TextHTMLtable, kvp, cbx.Checked)
createEmail(kvp.Key, TextHTMLtable, pdflist)
Next
End If
End Sub
Private Function createEMailTable(ByRef TextHTMLtable As String, kvp As KeyValuePair(Of Object, List(Of DataGridViewRow)), onlyRelevantInvioces As Boolean) As List(Of String)
'------------------------------------------------------------
'toDo-Logik für die Ausnahmen - START - wie in Function "setSQLWhere(aktLieferant As String, land As String) As String"
'------------------------------------------------------------
'1. wenn die Rechnung in dem Land in dem er ansässig ist ausgestellt wurde (rumän. Kunde Rechnung ausgestellt in Rumänien = z.B. IDS in RO getankt…)
Dim landKZiso2 = ""
Dim KUNDE_TEMP As cKunden
KUNDE_TEMP = kundenSQL.getKundeByKdNr(kvp.Key)
If KUNDE_TEMP.LandKz <> "" Then
If KUNDE_TEMP.LandKz.Length = 2 Then
landKZiso2 = KUNDE_TEMP.LandKz
ElseIf KUNDE_TEMP.LandKz.Length = 3 Then
landKZiso2 = VERAG_PROG_ALLGEMEIN.cProgramFunctions.getISO2LandFromISO3Land(KUNDE_TEMP.LandKz)
ElseIf KUNDE_TEMP.LandKz.Length = 1 Then
landKZiso2 = VERAG_PROG_ALLGEMEIN.cProgramFunctions.getISO2LandFromISO1Land(KUNDE_TEMP.LandKz)
End If
End If
Dim dtKundeMWSTTemp As DataTable = (New SQL).loadDgvBySql("select LandKz from tblKundenMWST where KdNr = " & KUNDE_TEMP.KundenNr, "FMZOLL")
'2. wenn die Rechnung die Summe NULL aufweist
'3. Rechnungen der Länder in denen der Kunde keine MWST erstattet bekommt (auch nicht auf Diesel -> IDS)
'4. Rechnungen der Länder, in denen der Kunde selber MWST beantragt
'If cbx.Checked AndAlso aktLieferant <> "IDS" AndAlso KUNDE IsNot Nothing Then
' Dim erw As New cKundenErweitert(KUNDE.KundenNr)
' If erw.kde_keineMWSt Then Return SQLWhere
' SQLWhere &= "AND ("
' 'ORIGINAL-RECHNUNG senden wenn:
' '1. wenn die Rechnung in dem Land in dem er ansässig ist ausgestellt wurde (rumän. Kunde Rechnung ausgestellt in Rumänien = z.B. IDS in RO getankt…)
' Dim landKZiso2 = ""
' If LAND <> "" Then 'LandKZ vom Kunden muss auf ISO2 konvertiert werden, weil da ein Misch-Masch in der Datenbank herrscht!
' If KUNDE.LandKz <> "" Then
' If KUNDE.LandKz.Length = 2 Then
' landKZiso2 = KUNDE.LandKz
' ElseIf KUNDE.LandKz.Length = 3 Then
' landKZiso2 = VERAG_PROG_ALLGEMEIN.cProgramFunctions.getISO2LandFromISO3Land(KUNDE.LandKz)
' ElseIf KUNDE.LandKz.Length = 1 Then
' landKZiso2 = VERAG_PROG_ALLGEMEIN.cProgramFunctions.getISO2LandFromISO1Land(KUNDE.LandKz)
' End If
' SQLWhere &= " " & LAND & " in ('" & landKZiso2 & "')"
' End If
' End If
' '2. wenn die Rechnung die MWST-SUMME 0 aufweist!!!
' Select Case aktLieferant
' Case "UTA" : SQLWhere &= " OR Gesamtbetrag_Umsatzsteuer_in_Darstellwährung = 0 " 'UTA bei UTA auch EPN ausblenden!
' Case "PLOSE" : SQLWhere &= " OR plInv_MWSTBetrag = 0" 'PLOSE
' Case "VERAG" : SQLWhere &= " OR tblTrdinInvoice.SteuerbetragLokal = 0" 'VERAG
' Case "MSE" : SQLWhere &= " OR total_vat_amount_euro = 0" 'MSE
' Case "RMC" : SQLWhere &= " OR rmc_betragMWST = 0" 'RMC
' Case "ALLE" : SQLWhere &= " OR temp.MWSt = 0" 'ALLE
' Case "UTA_" : SQLWhere &= " 1 <> 1"
' Case Else : SQLWhere &= " 1 <> 1"
' End Select
' '3. Rechnungen der Länder in denen der Kunde keine MWST erstattet bekommt
' If LAND <> "" AndAlso dtkeineMWST.Rows.Count > 0 Then
' Dim dtkeineMWST_ohneContraint As DataTable = dtkeineMWST.Select("Lieferant <> 'IDS' AND Land = '" & landKZiso2 & "'").CopyToDataTable
' Dim counter = 0
' Dim landBez As String = ""
' For Each row As DataRow In dtkeineMWST_ohneContraint.Rows
' landBez &= "'" & row.Item("Erstattungsland") & "'"
' counter = counter + 1
' If (dtkeineMWST_ohneContraint.Rows.Count <> 0 And counter <> dtkeineMWST_ohneContraint.Rows.Count) Then landBez &= ","
' Next
' SQLWhere &= " OR " & LAND & " in (" & landBez & ")"
' If aktLieferant = "ALLE" Then SQLWhere &= " OR " & LAND & " in ('')" 'damit IDS ohne Land nicht ausgeschlossen wird.
' End If
' '4. Rechnungen der Länder, in denen der Kunde selber MWST beantragt
' If LAND <> "" AndAlso dtKundeMWST.Rows.Count > 0 Then
' Dim counter = 0
' Dim landBez As String = ""
' For Each row As DataRow In dtKundeMWST.Rows
' landBez &= "'" & row.Item("LandKz") & "'"
' counter = counter + 1
' If (dtKundeMWST.Rows.Count <> 0 And counter <> dtKundeMWST.Rows.Count) Then landBez &= ","
' Next
' SQLWhere &= " OR " & LAND & " in (" & landBez & ")"
' End If
' SQLWhere &= ")"
'------------------------------------------------------------
'toDo-Logik für die Ausnahmen - END
'------------------------------------------------------------
TextHTMLtable &= "<table border=1>" TextHTMLtable &= "<table border=1>"
TextHTMLtable &= "<tr><td>Supplier</td><td>Country</td><td>Date</td></tr>" TextHTMLtable &= "<tr><td>Supplier</td><td>Country</td><td>Date</td></tr>"
@@ -804,7 +926,7 @@ Public Class usrcntlFremdrechnungen
For Each row In kvp.Value For Each row In kvp.Value
Dim erw As New cKundenErweitert(kvp.Key)
Dim Lieferant = "" Dim Lieferant = ""
If dgvLFRechnung.Columns.Contains("Lieferant") Then If dgvLFRechnung.Columns.Contains("Lieferant") Then
@@ -813,14 +935,48 @@ Public Class usrcntlFremdrechnungen
Lieferant = aktLieferant Lieferant = aktLieferant
End If End If
If onlyRelevantInvioces AndAlso Lieferant <> "IDS" AndAlso erw.kde_keineMWSt Then Exit For 'abbruchbedingung
Dim sendÍnvoice As Boolean = IIf(onlyRelevantInvioces, False, True)
'ORIGINAL-RECHNUNG senden wenn:
If onlyRelevantInvioces Then
'1. wenn die Rechnung in dem Land in dem er ansässig ist ausgestellt wurde (rumän. Kunde Rechnung ausgestellt in Rumänien = z.B. IDS in RO getankt…)
If row.Cells("Land").Value <> "" AndAlso landKZiso2 = row.Cells("Land").Value Then sendÍnvoice = True
'2. wenn die Rechnung die MWST-SUMME 0 aufweist!!!
If Not sendÍnvoice AndAlso row.Cells("MWSt").Value = 0 Then sendÍnvoice = True
'3. Rechnungen der Länder in denen der Kunde keine MWST erstattet bekommt -> dtkeineMWST
If Not sendÍnvoice AndAlso landKZiso2 <> "" AndAlso dtkeineMWST.Rows.Count > 0 Then
Dim rows() As DataRow = dtkeineMWST.Select("Lieferant <> 'IDS' AND Land = '" & landKZiso2 & "' and Erstattungsland = '" & row.Cells("Land").Value & "'")
Dim dtkeineMWST_ohneContraint As New DataTable
If rows.Length > 0 Then dtkeineMWST_ohneContraint = rows.CopyToDataTable()
If dtkeineMWST_ohneContraint.Rows.Count > 0 Then sendÍnvoice = True
End If
'4. Rechnungen der Länder, in denen der Kunde selber MWST beantragt
If Not sendÍnvoice AndAlso landKZiso2 <> "" AndAlso dtKundeMWSTTemp.Rows.Count > 0 Then
Dim rows() As DataRow = dtKundeMWSTTemp.Select("LandKz = '" & row.Cells("Land").Value & "'")
Dim dtKundeMWSTTemp_ohneContraint As New DataTable
If rows.Length > 0 Then dtKundeMWSTTemp_ohneContraint = rows.CopyToDataTable()
If dtKundeMWSTTemp_ohneContraint.Rows.Count > 0 Then sendÍnvoice = True
End If
End If
If Lieferant = "VERAG" Then If Lieferant = "VERAG" Then
'VERAG IGNORIEREN 'VERAG IGNORIEREN
'Dim ReDat = row.Cells("Rechnungsdatum").Value 'Dim ReDat = row.Cells("Rechnungsdatum").Value
'Dim ReNr = row.Cells("Rechnungsnummer").Value 'Dim ReNr = row.Cells("Rechnungsnummer").Value
'If ReDat IsNot Nothing AndAlso ReNr > 0 Then 'If ReDat IsNot Nothing AndAlso ReNr > 0 Then
' Me.Cursor = Cursors.WaitCursor ' Me.Cursor = Cursors.WaitCursor
' Dim 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") ' Dim 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")
' cFakturierung.doRechnungsDruck_SRorER(da_id,, False, 3) ' cFakturierung.doRechnungsDruck_SRorER(da_id,, False, 3)
'End If 'End If
@@ -839,6 +995,9 @@ Public Class usrcntlFremdrechnungen
TextHTMLtable &= "<td><b>" & r.Item("Rechnungsdatum") & "</b></td>" TextHTMLtable &= "<td><b>" & r.Item("Rechnungsdatum") & "</b></td>"
TextHTMLtable &= "</tr>" TextHTMLtable &= "</tr>"
Dim daId As Integer = IIf(IsDBNull(r.Item("daId")), -1, r.Item("daId")) Dim daId As Integer = IIf(IsDBNull(r.Item("daId")), -1, r.Item("daId"))
If daId > 0 Then If daId > 0 Then
Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER(daId) Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER(daId)
@@ -850,6 +1009,7 @@ Public Class usrcntlFremdrechnungen
Else Else
If sendÍnvoice Then
TextHTMLtable &= "<tr>" TextHTMLtable &= "<tr>"
TextHTMLtable &= "<td><b>" & Lieferant & "</b></td>" TextHTMLtable &= "<td><b>" & Lieferant & "</b></td>"
TextHTMLtable &= "<td><b>" & row.Cells("Land").Value & "</b></td>" TextHTMLtable &= "<td><b>" & row.Cells("Land").Value & "</b></td>"
@@ -863,6 +1023,8 @@ Public Class usrcntlFremdrechnungen
End If End If
End If End If
End If
@@ -870,15 +1032,21 @@ Public Class usrcntlFremdrechnungen
Next Next
TextHTMLtable &= "</table>" TextHTMLtable &= "</table>"
Return pdflist
End Function
Private Sub createEmail(kdNr As Integer, ByRef TextHTMLtable As String, pdflist As List(Of String))
Dim outl As New Outlook.Application Dim outl As New Outlook.Application
Dim Mail As Microsoft.Office.Interop.Outlook.MailItem Dim Mail As Microsoft.Office.Interop.Outlook.MailItem
Mail = outl.CreateItem(0) Mail = outl.CreateItem(0)
Dim kundeMail As New cKunden() Dim kundeMail As New cKunden()
kundeMail = kundenSQL.getKundeByKdNr(kvp.Key) kundeMail = kundenSQL.getKundeByKdNr(kdNr)
Select Case kundeMail.LandKz Select Case kundeMail.LandKz
Case "TR" Case "TR"
@@ -961,7 +1129,7 @@ Public Class usrcntlFremdrechnungen
If Mail IsNot Nothing Then If Mail IsNot Nothing Then
Dim API = VERAG_PROG_ALLGEMEIN.cAPI.INSERT_API(VERAG_PROG_ALLGEMEIN.cAPI_INOUT.OUT, VERAG_PROG_ALLGEMEIN.cAPI_Type.MAIL, VERAG_PROG_ALLGEMEIN.cAPI_ART.SDL_OUT_SAMMELRECHNUNG, "MAIL-ORIG-RG",,, kvp.Key) Dim API = VERAG_PROG_ALLGEMEIN.cAPI.INSERT_API(VERAG_PROG_ALLGEMEIN.cAPI_INOUT.OUT, VERAG_PROG_ALLGEMEIN.cAPI_Type.MAIL, VERAG_PROG_ALLGEMEIN.cAPI_ART.SDL_OUT_SAMMELRECHNUNG, "MAIL-ORIG-RG",,, kdNr)
API.api_EMail = Mail.To API.api_EMail = Mail.To
API.api_EMailCC = Mail.CC API.api_EMailCC = Mail.CC
@@ -991,33 +1159,8 @@ Public Class usrcntlFremdrechnungen
End If End If
Next
End If
End Sub End Sub
'Sub SelectRow(kdnr, kfz, SDLNr, history)
' dgvInitWait = True
' dgvSDL.ClearSelection()
' For Each r As DataGridViewRow In dgvSDL.Rows
' If r.Cells("KundenNr").Value = kdnr AndAlso
' r.Cells("SDLNr").Value = SDLNr AndAlso
' r.Cells("KfzKennzeichen").Value = kfz AndAlso
' r.Cells("History").Value = history Then
' r.Selected = True
' dgvSDL.FirstDisplayedScrollingRowIndex = r.Index
' Exit For
' End If
' Next
' dgvInitWait = False
' 'ReloadLeistung()
' dgvSDL.PerformLayout()
'End Sub
Private Sub ToolStripMenuItem3_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem3.Click Private Sub ToolStripMenuItem3_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem3.Click
Me.Cursor = Cursors.WaitCursor Me.Cursor = Cursors.WaitCursor
cProgramFunctions.genExcelFromDGV(dgvLFRechnung, True) cProgramFunctions.genExcelFromDGV(dgvLFRechnung, True)
@@ -1042,16 +1185,6 @@ Public Class usrcntlFremdrechnungen
SET_SDL(aktLieferant) SET_SDL(aktLieferant)
End Sub End Sub
Private Sub dgvSDL_RELOADED() Handles dgvLFRechnung.RELOADED
' redRows()
End Sub
Private Sub usrCntlKartenDaten_SizeChanged(sender As Object, e As EventArgs) Handles Me.SizeChanged
' initDGVWidth()
End Sub
Dim vval As Integer Dim vval As Integer
Private Sub dgvSDL_GotFocus(sender As Object, e As EventArgs) Handles dgvLFRechnung.GotFocus Private Sub dgvSDL_GotFocus(sender As Object, e As EventArgs) Handles dgvLFRechnung.GotFocus
'dgvSDL.VerticalScrollingOffset = vval 'dgvSDL.VerticalScrollingOffset = vval