Files
SDL/SDL/Fakturierung/frmFaktSammelRgDrucken.vb
2019-10-31 09:23:20 +01:00

320 lines
17 KiB
VB.net

Imports Microsoft.Office.Interop
Public Class frmFaktSammelRgDrucken
Dim Sammelrechung = -1
Dim Firma = 1
Dim loaded = False
Sub New()
' Dieser Aufruf ist für den Designer erforderlich.
InitializeComponent()
' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
End Sub
Sub New(Firma)
' Dieser Aufruf ist für den Designer erforderlich.
InitializeComponent()
' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
Me.Firma = Firma
End Sub
Private Sub RadioButton_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton.CheckedChanged, RadioButton1.CheckedChanged, RadioButton2.CheckedChanged, RadioButton3.CheckedChanged, RadioButton4.CheckedChanged, RadioButton6.CheckedChanged
lblSB.Visible = False : cboSB.Visible = False
cboSB.changeItem("")
If DirectCast(sender, RadioButton).Checked Then Sammelrechung = sender.tag
Select Case Sammelrechung
Case 1 : txtZeitraumBis.Text = Now.AddDays(-1).ToShortDateString
Case 2 'txtZeitraumBis.Text = CDate(Now.ToString("01.MM.yyyy")).AddDays(-1)
If Now.Day > 15 Then
txtZeitraumBis.Text = CDate(Now.ToString("15.MM.yyyy"))
Else
txtZeitraumBis.Text = CDate(Now.ToString("01.MM.yyyy")).AddDays(-1)
End If
Case 3 : txtZeitraumBis.Text = CDate(Now.ToString("01.MM.yyyy")).AddDays(-1)
Case 4 ': txtZeitraumBis.Text = CDate(Now.ToString("01.MM.yyyy")).AddDays(-1) '???
If Now.Day >= 20 Then
txtZeitraumBis.Text = CDate(Now.ToString("20.MM.yyyy"))
ElseIf Now.Day >= 10 Then
txtZeitraumBis.Text = CDate(Now.ToString("10.MM.yyyy")).AddDays(-1)
Else
txtZeitraumBis.Text = CDate(Now.ToString("01.MM.yyyy")).AddDays(-1)
End If
Case 5 : txtZeitraumBis.Text = Now.AddDays((Now.DayOfWeek) * -1).ToShortDateString
'Case 6 : txtZeitraumBis.Text = Now.AddDays(-1).ToShortDateString
Case 7 : txtZeitraumBis.Text = Now.ToShortDateString : lblSB.Visible = True : cboSB.Visible = True : cboSB.changeItem(VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME)
End Select
initDGV()
End Sub
Sub initDGV()
With MyDatagridview1
Dim sqlStr = " SELECT Rechnungsausgang.RechnungsKundenNr, max(Rechnungsausgang.[RechnungsName 1]) as [RechnungsName 1]," & If(Sammelrechung = 7, "AvisoId", "0") & " as AvisoId,max(Rechnungsausgang.[RechnungsLandKz]) as [RechnungsLandKz] , count(*) as Anzahl" & If(Sammelrechung = 7, ",max([LKW Kennzeichen]) as LKW", "") & "
FROM Rechnungsausgang
WHERE Rechnungsausgang.Status IN (0,2) And Rechnungsausgang.Firma_ID = '" & cboFirma._value & "' And Rechnungsausgang.Sammelrechnung = '" & Sammelrechung & "' And CONVERT(DATE,Rechnungsausgang.Abfertigungsdatum,104) <= '" & txtZeitraumBis._value & "'
" & If(Sammelrechung = 7 And cboSB._value <> "", " AND Sachbearbeiter='" & cboSB._value & "' ", "") & "
GROUP BY RechnungsKundenNr " & If(Sammelrechung = 7, ",AvisoId", "") & "
ORDER BY Rechnungsausgang.RechnungsKundenNr "
'Rechnungsausgang.Status IN (0,2) --> vormals nur 2
.SET_SQL(sqlStr, "FMZOLL")
.LOAD()
.Columns("RechnungsKundenNr").Width = 120
.Columns("RechnungsKundenNr").HeaderText = "KundenNr"
.Columns("RechnungsName 1").HeaderText = "Firma"
.Columns("RechnungsLandKz").Visible = False
.Columns("Anzahl").Width = 42
.Columns("Anzahl").DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
.Columns(2).Visible = False
If .Columns.Count = 6 Then
.Columns("LKW").Width = 80
End If
.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
.ClearSelection()
End With
End Sub
Private Sub frmFaktSammelRgDrucken_Load(sender As Object, e As EventArgs) Handles Me.Load
txtZeitraumBis.Text = Now.ToShortDateString
txtRechnungsdatum.Text = Now.ToShortDateString
Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
Case "VERAG"
cboFirma.fillWithSQL("SELECT [Firma_ID],[Firma_Bez] FROM [tblFirma] WHERE Firma_ID<>20", False, "FMZOLL")
cboFirma.changeItem("1")
cboSB.fillWithSQL("SELECT [mit_username] FROM [tblMitarbeiter] where mit_firma IN ('VERAG'" & If(VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME = "ADMIN", ",'ALL'", "") & ") and mit_gekuendigt=0 AND (mit_abteilung IN ('VRR','BH') OR [mit_id] IN (SELECT [beroz_bergrId] FROM [tblBerechtigungsObjekteZuordnung] where [beroz_beroId]=90 AND beroz_art='B')) order by mit_username", False, "ADMIN", True)
Case "IMEX"
cboFirma.fillWithSQL("SELECT [Firma_ID],[Firma_Bez] FROM [tblFirma] WHERE Firma_ID=20", False, "FMZOLL")
cboFirma.changeItem("20")
cboSB.fillWithSQL("SELECT [mit_username] FROM [tblMitarbeiter] where mit_firma='IMEX' and mit_gekuendigt=0 AND (mit_abteilung IN ('VRR','BH') OR (SELECT COUNT(*) FROM [tblBerechtigungsObjekteZuordnung] where [beroz_beroId]=90 AND [beroz_bergrId]=[mit_id] AND beroz_art='B')>0) order by mit_username", False, "ADMIN", True)
End Select
' cboFirma.fillWithSQL("SELECT [Firma_ID],[Firma_Bez] FROM [tblFirma] WHERE Firma_ID NOT IN(3) ORDER BY Firma_ID ", True, "FMZOLL")
cboFirma.changeItem(Firma)
cboSB.changeItem(VERAG_PROG_ALLGEMEIN.cAllgemein.USRKURZNAME)
cProgramFunctions.initDrucker(cboPrinter)
RadioButton.Checked = True
loaded = True
initDGV()
End Sub
Private Sub txtRechnungsdatum_TextChanged(sender As Object, e As EventArgs) Handles txtRechnungsdatum.Leave, cboFirma.SelectedIndexChanged, txtZeitraumBis.Leave, cboSB.SelectedIndexChanged
initDGV()
End Sub
Private Sub btn_Click(sender As Object, e As EventArgs) Handles btn.Click
doSammelrechnung(1)
End Sub
Function getSelectionKdNr() As String
getSelectionKdNr = ""
If MyDatagridview1.SelectedRows.Count > 0 Then
If MyDatagridview1.SelectedRows.Count = MyDatagridview1.Rows.Count Then Return "" ' Alle ausgewählt
For Each r As DataGridViewRow In MyDatagridview1.SelectedRows
getSelectionKdNr &= r.Cells("RechnungsKundenNr").Value & ","
Next
getSelectionKdNr = getSelectionKdNr.Substring(0, getSelectionKdNr.Length - 1)
End If
End Function
Function getSelectionKdNr_Simple() As String
If MyDatagridview1.Rows.Count = 1 Then Return MyDatagridview1.Rows(0).Cells("RechnungsKundenNr").Value
If MyDatagridview1.SelectedRows.Count = 1 Then Return MyDatagridview1.SelectedRows(0).Cells("RechnungsKundenNr").Value
If MyDatagridview1.Rows.Count > 0 Then ' Wenn alle gliech sind, dann wir die KdNr zurückgegben
Dim kdTmp = MyDatagridview1.Rows(0).Cells("RechnungsKundenNr").Value
For Each r As DataGridViewRow In MyDatagridview1.SelectedRows
If r.Cells("RechnungsKundenNr").Value <> kdTmp Then Return ""
Next
Return kdTmp
End If
Return ""
End Function
Function getSelectionLandKz() As String
getSelectionLandKz = ""
If MyDatagridview1.Rows.Count > 0 Then
If MyDatagridview1.SelectedRows.Count > 0 Then
For Each r As DataGridViewRow In MyDatagridview1.SelectedRows
If r.Cells("RechnungsLandKz").Value IsNot DBNull.Value Then
If getSelectionLandKz = "" Then
getSelectionLandKz = r.Cells("RechnungsLandKz").Value
Else
If getSelectionLandKz <> r.Cells("RechnungsLandKz").Value Then
Return ""
End If
End If
End If
Next
Else
For Each r As DataGridViewRow In MyDatagridview1.Rows
If r.Cells("RechnungsLandKz").Value IsNot DBNull.Value Then
If getSelectionLandKz = "" Then
getSelectionLandKz = r.Cells("RechnungsLandKz").Value
Else
If getSelectionLandKz <> r.Cells("RechnungsLandKz").Value Then
Return ""
End If
End If
End If
Next
End If
End If
End Function
Private Sub MyDatagridview1_SelectionChanged(sender As Object, e As EventArgs) Handles MyDatagridview1.SelectionChanged
' MyDatagridview1.ClearSelection()
End Sub
Private Sub Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click
doSammelrechnung(3)
End Sub
Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click
If Not IsNumeric(getSelectionKdNr_Simple) Then MsgBox("Es muss eine eindeutige KundenNr ausgewählt werden!") : Exit Sub
Dim f As New frmFaktEmail(cboFirma._value, Sammelrechung, CDate(txtZeitraumBis.Text), CDate(txtRechnungsdatum.Text), cboPrinter.Text, cbxEinzelAnlagen.Checked, cbxSammelbericht.Checked, getSelectionKdNr_Simple, -1, Nothing, cboSB._value,, getAvisoIds)
f.ShowDialog(Me)
initDGV()
'Else
' doSammelrechnung(2)
'End If
End Sub
Function getAvisoIds() As List(Of Integer)
If Sammelrechung <> 7 Then Return Nothing
Dim AvisoIds As New List(Of Integer)
If MyDatagridview1.SelectedRows.Count > 0 Then
For Each r In MyDatagridview1.SelectedRows
AvisoIds.Add(r.cells("AvisoId").value)
Next
End If
Return AvisoIds
End Function
Sub doSammelrechnung(ausgabeArt As Integer)
Try
If cboFirma._value = "" Then MsgBox("Bitte Firma angeben!") : Exit Sub
If txtZeitraumBis.Text = "" Then MsgBox("Bitte Zeitraum-Bis angeben!") : Exit Sub
If txtRechnungsdatum.Text = "" Then MsgBox("Bitte Rechnungsdatum angeben!") : Exit Sub
Me.Enabled = False
Me.Cursor = Cursors.WaitCursor
Dim listPDFs As New List(Of String)
cFakturierung.doSAMMELRechnungsDruck(cboFirma._value, Sammelrechung, CDate(txtZeitraumBis.Text), CDate(txtRechnungsdatum.Text), cboPrinter.Text, cbxEinzelAnlagen.Checked, cbxSammelbericht.Checked, getSelectionKdNr, If(ausgabeArt = 1, -1, 4), listPDFs, cboSB._value,,, getAvisoIds)
'-------------- für PDF-Sammel-Rechnung --------------
If cbxZusammenfassen.Checked Then ' Gibt an, ob mehrere Sammelrechnung zusammengefasst werden sollten
Select Case ausgabeArt
Case 2 'MAIL
If listPDFs.Count > 0 Then
Try
Dim outl As New Outlook.Application
Dim Mail As Microsoft.Office.Interop.Outlook.MailItem
Mail = outl.CreateItem(0)
Mail.Subject = "VERAG Sammel-Rechnung"
Mail.HTMLBody = getSammelRgTExt(getSelectionLandKz)
If IsNumeric(getSelectionKdNr) Then Mail.To = VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdress(CInt(getSelectionKdNr()), "Rechnung an")
For Each pdf In listPDFs
Mail.Attachments.Add(pdf, Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue)
Next
Mail.Display()
Catch ex As Exception
MsgBox("Fehler beim Öffnen des Mail-Programmes.") ' PDF wird geöffnet!")
' Process.Start(pdf)
End Try
End If
Case 3 'PDF + öffnen
Dim pathPDF = VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getTMPPath("VERAG_Sammelrechnung.pdf", ".pdf", False, False)
If FormularManagerNEU.MergePdfFiles(listPDFs, pathPDF) Then
Process.Start(pathPDF)
Else
MsgBox("Fehler beim zusammenführen der PDFs.")
End If
End Select
Else 'nein (Standard)
Select Case ausgabeArt
Case 2 'MAIL
If listPDFs.Count > 0 Then
For Each pdf In listPDFs
Try
Dim outl As New Outlook.Application
Dim Mail As Microsoft.Office.Interop.Outlook.MailItem
Mail = outl.CreateItem(0)
Mail.Subject = "VERAG Sammel-Rechnung"
If IsNumeric(getSelectionKdNr) Then Mail.To = VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdress(CInt(getSelectionKdNr()), "Rechnung an")
Mail.HTMLBody = getSammelRgTExt(getSelectionLandKz) ' Sehr geehrte Damen und Herren,<br><br>anbei erhalten Sie Ihre Sammel-Rechnung."
Mail.Attachments.Add(pdf, Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue)
Mail.Display()
Catch ex As Exception
MsgBox("Fehler beim Öffnen des Mail-Programmes. PDF wird geöffnet!")
Process.Start(pdf)
End Try
Next
End If
Case 3 'PDF + öffnen
For Each pdf In listPDFs
Process.Start(pdf)
Next
End Select
End If
'-------------- ENDE --------------
Catch ex As Exception
MsgBox(ex.Message & ex.StackTrace)
End Try
initDGV()
Me.Enabled = True
Me.Cursor = Cursors.Default
End Sub
Function getSammelRgTExt(RechnungsLandKz) As String
If RechnungsLandKz = "" Then
getSammelRgTExt = "Sehr geehrte Damen und Herren,<br>"
getSammelRgTExt &= "Dear Ladies and Gentlemen,<br>"
getSammelRgTExt &= "Sayin Bayanlar ve Baylar,<br>"
getSammelRgTExt &= "<br>"
getSammelRgTExt &= "im Anhang senden wir Ihnen die o.g. Rechnung.<br>"
getSammelRgTExt &= "attached we send you the invoice mentioned above.<br>"
getSammelRgTExt &= "ekte baslikta yazan faturayi bulabilirsinz.<br>"
getSammelRgTExt &= "<br>"
getSammelRgTExt &= "<br><br><br>Mit freundlichen Grüßen / Best regards / Saygilarimizla<br><br>VERAG Spedition AG<br><br>" & cFakturierung.getSignature(RechnungsLandKz, cboFirma._value)
Return "<div style=""font-family:Calibri, Arial"">" & getSammelRgTExt & "</div>"
End If
Select Case RechnungsLandKz
Case "TR"
getSammelRgTExt = "Sayin Bayanlar ve Baylar,<br><br>ekte baslikta yazan faturayi bulabilirsinz."
getSammelRgTExt &= "<br><br><br>Saygilarimizla<br><br>VERAG Spedition AG<br><br>" & cFakturierung.getSignature(RechnungsLandKz, cboFirma._value)
Case "A", "AT", "D", "DE", "CH"
getSammelRgTExt = "Sehr geehrte Damen und Herren,<br><br>im Anhang senden wir Ihnen die o.g. Rechnung."
getSammelRgTExt &= "<br><br><br>Mit freundlichen Grüßen<br><br>VERAG Spedition AG<br><br>" & cFakturierung.getSignature(RechnungsLandKz, cboFirma._value)
Case Else
getSammelRgTExt = "Dear Ladies and Gentlemen,<br><br>attached we send you the invoice mentioned above."
getSammelRgTExt &= "<br><br><br>Best regards<br><br>VERAG Spedition AG<br><br>" & cFakturierung.getSignature(RechnungsLandKz, cboFirma._value)
End Select
getSammelRgTExt = "<div style=""font-family:Calibri, Arial"">" & getSammelRgTExt & "</div>"
End Function
Private Sub lkl_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles lkl.LinkClicked
MyDatagridview1.ClearSelection()
End Sub
End Class