Files
SDL/SDL/seriendruck/usrCntlSeriendruck.vb

369 lines
19 KiB
VB.net

Imports Microsoft.Office.Interop
Imports VERAG_PROG_ALLGEMEIN
Public Class usrCntlSeriendruck
Dim withPrint As Boolean = False
Dim FMZOLL_SQL As New FMZOLL_SQL
Private Sub btnWord_Click(sender As Object, e As EventArgs) Handles btnWord.Click
If Not txtErstattungAbfNr_neu.ForeColor = Color.DarkGreen Then
frmMain.setInfo("info", "Die Abfertigungsnummer ist nicht gültig!", 2)
Exit Sub
End If
If cbxErstSprache.Text = "" Then
frmMain.setInfo("info", "Bitte wählen Sie eine Sprache!", 2)
Exit Sub
End If
Dim WordDoc As Object
Dim WordApp As Object
WordApp = CreateObject("word.Application")
WordDoc = CreateObject("word.Document")
Dim oItem As VERAG_PROG_ALLGEMEIN.MyListItem = CType(cbxErstSprache.SelectedItem, VERAG_PROG_ALLGEMEIN.MyListItem)
If Not My.Computer.FileSystem.DirectoryExists(Environment.GetFolderPath(Environment.SpecialFolder.Personal) & "\VERAG\tmp\") Then
My.Computer.FileSystem.CreateDirectory(Environment.GetFolderPath(Environment.SpecialFolder.Personal) & "\VERAG\tmp\")
End If
Dim strFileName As String = Environment.GetFolderPath(Environment.SpecialFolder.Personal) & "\VERAG\tmp\tmp.doc"
Try
WordApp.Visible = (True) 'Word sichtbar
WordDoc = WordApp.Documents.Open(AppDomain.CurrentDomain.BaseDirectory & "seriendruck\Vorlagen\Erstattungsschreiben\Erstattungsschreiben " & oItem.Value & ".dotx")
WordDoc.Activate()
Dim berichteSQL As New BerichteSQL
Dim bericht As cErstasttungsschreiben = berichteSQL.getErstatung(txtErstattungAbfNrFiliale_neu.Text, txtErstattungAbfNr_neu.Text, txtErstattungAbfUnterNr_neu.Text)
Dim FIRMA As New VERAG_PROG_ALLGEMEIN.cFirmen(19)
Dim FIRMA_DE As New VERAG_PROG_ALLGEMEIN.cFirmen(2)
'Dim ADRESSE = New VERAG_PROG_ALLGEMEIN.cAdressen(bericht.)
If FIRMA IsNot Nothing Then
WordDoc.FormFields("txtAdresseZeileFirma").Range.Text = FIRMA.Firma_Bez + ", " + FIRMA.Firma_Ort + ", " + FIRMA.Firma_Straße
WordDoc.FormFields("txtAdresseZeileFirm1").Range.Text = FIRMA_DE.Firma_Bez + ", " + FIRMA_DE.Firma_Ort + ", " + FIRMA_DE.Firma_Straße
End If
If bericht.KorrAdresse <> "" Then
bericht.KorrAdresse = bericht.KorrAdresse.Replace(Chr(13) & Chr(10), Chr(13))
If InStr(bericht.KorrAdresse, Chr(13)) > 0 Then
Dim s = bericht.KorrAdresse.Split(Chr(13), Chr(10))
If s.Length > 0 Then WordDoc.FormFields("txtAdresseZeile1").Range.Text = s(0)
If s.Length > 1 Then WordDoc.FormFields("txtAdresseZeile2").Range.Text = s(1)
If s.Length > 2 Then WordDoc.FormFields("txtAdresseZeile3").Range.Text = s(2)
If s.Length > 3 Then WordDoc.FormFields("txtAdresseZeile4").Range.Text = s(3)
If s.Length > 4 Then WordDoc.FormFields("txtAdresseZeile5").Range.Text = s(4)
If s.Length > 5 Then WordDoc.FormFields("txtAdresseZeile6").Range.Text = s(5)
If s.Length > 6 Then WordDoc.FormFields("txtAdresseZeile7").Range.Text = s(6)
End If
Else
WordDoc.FormFields("txtAdresseZeile1").Range.Text = bericht.Name.Trim
WordDoc.FormFields("txtAdresseZeile2").Range.Text = bericht.Straße
WordDoc.FormFields("txtAdresseZeile3").Range.Text = bericht.Ort
WordDoc.FormFields("txtAdresseZeile4").Range.Text = cProgramFunctions.getLandBez_fromISO1Land(bericht.LandKz, "", cbxErstSprache.SelectedItem.value).ToString.ToUpper
End If
WordDoc.FormFields("Datum").Range.Text = bericht.MWST
WordDoc.FormFields("Betrag").Range.Text = String.Format("{0:C}", CDbl(bericht.Betrag))
WordApp.DisplayAlerts = Word.WdAlertLevel.wdAlertsNone
Try : WordDoc.SaveAs(strFileName) : Catch : End Try
If withPrint Then
WordDoc.PrintOut()
WordDoc.Close(False)
WordDoc = Nothing
WordApp.Quit()
Me.BringToFront()
txtErstattungAbfNr_neu.Focus()
txtErstattungAbfNr_neu.SelectAll()
End If
'WordDoc.PrintOut()
'WordDoc.PrintOut()
'WordDoc.Close()
' WordDoc = Nothing
' WordDoc.Quit()
Catch ex As Exception
MsgBox(ex.Message)
End Try
withPrint = False
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnShowData.Click
If Not txtErstattungAbfNr_neu.ForeColor = Color.DarkGreen Then Exit Sub
If cbxErstSprache.Text = "" Then Exit Sub
frmShowData.Show()
frmShowData.DataGridView1.DataSource = FMZOLL_SQL.loadDgvBySqlFMZOLLREAL("exec spSELECTUStVErstattungsschreiben " & txtErstattungAbfNrFiliale_neu.Text & ", " & txtErstattungAbfNr_neu.Text & ", " & txtErstattungAbfUnterNr_neu.Text & " ")
frmShowData.Label2.Text = "Anzahl: " & frmShowData.DataGridView1.RowCount
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs)
Dim von As DateTime = Now
Dim bis As DateTime = Now.AddMonths(2)
frmShowData.Show()
'LandKz='RO' AND
'MsgBox("SELECT * FROM vwUStSerienbriefStNrGueltigkeitsdatum WHERE StNrGültigkeitsdatum BETWEEN '" & von.ToShortDateString & "' AND '" & bis.ToShortDateString & "' GROUP BY [Name 1],[Name 2],PLZ,StraßePostfach,Postfach,Straße,LandKz,Ort,[StNrGültigkeitsdatum],AdressenNr ORDER BY PLZ, AdressenNr ")
frmShowData.DataGridView1.DataSource = FMZOLL_SQL.loadDgvBySql("SELECT * FROM vwUStSerienbriefStNrGueltigkeitsdatum WHERE StNrGültigkeitsdatum BETWEEN '" & von.ToShortDateString & "' AND '" & bis.ToShortDateString & "' GROUP BY [Name 1],[Name 2],PLZ,StraßePostfach,Postfach,Straße,LandKz,Ort,[StNrGültigkeitsdatum],AdressenNr ORDER BY PLZ, AdressenNr ")
frmShowData.Label2.Text = "Anzahl: " & frmShowData.DataGridView1.RowCount
Exit Sub
Dim sprache As String = "DE"
Select Case cbxErstSprache.SelectedIndex
Case 0 : sprache = "DE"
Case 1 : sprache = "RO"
Case 2 : sprache = "TR"
Case 3 : sprache = "YU"
End Select
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
' Dim SQLSttmnt As String = "Select * From rechner WHERE ID=5360"
WordApp = New Word.Application()
WordDoc = WordApp.Documents.Open(AppDomain.CurrentDomain.BaseDirectory & "\seriendruck\Vorlagen\Erstattungsschreiben\Erstattungsschreiben " & sprache & ".doc")
WordDoc.MailMerge.MainDocumentType = Word.WdMailMergeMainDocType.wdFormLetters
Dim sqlstr As String = "SELECT * FROM vwUStSerienbriefStNrGueltigkeitsdatum WHERE LandKz='RO' AND StNrGültigkeitsdatum BETWEEN '" & von.ToShortDateString & "' AND '" & bis.ToShortDateString & "' GROUP BY [Name 1],StraßePostfach,PLZ ORDER BY PLZ, AdressenNr "
WordDoc.MailMerge.OpenDataSource(Name:="",
Connection:="DSN=dbConn_FMZOLL;DATABASE=VERAG;uid=sa;pwd=BmWr501956;",
SQLStatement:=sqlstr, SubType:=Microsoft.Office.Interop.Word.WdMergeSubType.wdMergeSubTypeWord2000)
'Provider=SQLOLEDB;Server=DEVELOPER\DEVSQL;Database=VERAG;uid=sa;Password=BmWr501956;
' With WordDoc.MailMerge
' '.Destination = Word.WdMailMergeDestination.wdSendToPrinter
' .SuppressBlankLines = True
' With .DataSource
' .FirstRecord = Word.WdMailMergeDefaultRecord.wdDefaultFirstRecord
'.LastRecord = Word.WdMailMergeDefaultRecord.wdDefaultLastRecord
' End With
' .Execute(Pause:=False)
' End With
' WordDoc.Close()
WordApp.Visible = True
End Sub
Private Sub txtErstattungAbfNr_KeyDown(sender As Object, e As KeyEventArgs) Handles txtErstattungAbfNr_neu.KeyDown, txtErstattungAbfNrFiliale.KeyDown, txtErstattungAbfUnterNr.KeyDown, cbxErstSprache.KeyDown, txtErstattungAbfNr_neu.KeyDown, txtErstattungAbfNrFiliale_neu.KeyDown, txtErstattungAbfUnterNr_neu.KeyDown
If e.KeyCode = Keys.Enter AndAlso e.Handled = False Then
withPrint = cbxSofortDruck.Checked
btnWord.PerformClick()
e.Handled = True
End If
End Sub
Private Sub txtErstattungAbfNr_LostFocus(sender As Object, e As EventArgs) Handles txtErstattungAbfNr_neu.TextChanged
txtErstattungAbfNr_neu.BackColor = Color.White
txtErstattungAbfNr_neu.ForeColor = Color.Red
If NurZahlen(txtErstattungAbfNr_neu.Text) And NurZahlen(txtErstattungAbfNrFiliale_neu.Text) And NurZahlen(txtErstattungAbfUnterNr_neu.Text) Then
'Dim dt As DataTable = FMZOLL_SQL.loadDgvBySqlFMZOLLREAL("SELECT TOP 1 * FROM vwUStVErstattungsschreiben WHERE AbfertigungsNr=" & txtErstattungAbfNr.Text & " and FilialenNr =" & txtErstattungAbfNrFiliale.Text & " and UnterNr =" & txtErstattungAbfUnterNr.Text & " ")
Dim dt As DataTable = FMZOLL_SQL.loadDgvBySqlFMZOLLREAL("exec spSELECTUStVErstattungsschreiben " & txtErstattungAbfNrFiliale_neu.Text & ", " & txtErstattungAbfNr_neu.Text & ", " & txtErstattungAbfUnterNr_neu.Text & " ")
If Not dt Is Nothing AndAlso dt.Rows.Count > 0 Then
Try
Select Case dt.Rows(0).Item("LandKz").ToString
Case "AT", "DE", "CH" : cbxErstSprache.SelectedIndex = 0
Case "RO" : cbxErstSprache.SelectedIndex = 1
Case "TR" : cbxErstSprache.SelectedIndex = 2
Case Else : cbxErstSprache.SelectedIndex = 3
End Select
Catch : End Try
txtErstattungAbfNr_neu.BackColor = Color.White
txtErstattungAbfNr_neu.ForeColor = Color.DarkGreen
End If
End If
End Sub
Private Sub btnWordPrint_Click(sender As Object, e As EventArgs) Handles btnWordPrint.Click
withPrint = True
btnWord.PerformClick()
End Sub
Private Sub usrCntlSeriendruck_Load(sender As Object, e As EventArgs) Handles Me.Load
cbxErstSprache.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("DEUTSCH", "DE"))
cbxErstSprache.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("RUMÄNISCH", "RO"))
cbxErstSprache.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("TÜRKISCH", "TR"))
cbxErstSprache.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("YU", "YU"))
cbxErstSprache.SelectedIndex = 0
txtErstattungAbfNr_neu.Focus()
cboErstattungsart.Items.Clear()
cboErstattungsart.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("", 0))
cboErstattungsart.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("1.Gegenrechnen", 1))
cboErstattungsart.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("2.Überweisung", 2))
cboErstattungsart.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("3.Bankverbindung", 3))
cboErstattungsart.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("4.Auf Sicherheit", 4))
End Sub
Public Function NurZahlen(ByVal Text As String) As Boolean
If Text.Length = 0 Then Return False
If Not IsNumeric(Text) Then Return False
For i As Integer = 0 To Text.Length - 1
If Not "0123456789".Contains(Text.Chars(i)) Then
Return False
End If
Next
Return True
End Function
Private Sub txtErstattungAbfUnterNr_LostFocus(sender As Object, e As EventArgs) Handles txtErstattungAbfUnterNr.LostFocus
If NurZahlen(txtErstattungAbfUnterNr_neu.Text) Then
If txtErstattungAbfUnterNr_neu.Text.Length = 1 Then txtErstattungAbfUnterNr_neu.Text = "0" & txtErstattungAbfUnterNr_neu.Text
End If
End Sub
Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
frmShowData.Show()
frmShowData.DataGridView1.DataSource = generateDTErstattungen()
frmShowData.Label2.Text = "Anzahl: " & frmShowData.DataGridView1.RowCount
End Sub
Private Sub btnMail_Intern_Click(sender As Object, e As EventArgs) Handles btnMail_Intern.Click
If cboErstattungsart.SelectedIndex <> 4 Then
MsgBox("Die Erstattungsschreiben sind aktuell nur für den Typ 4 - Auf Sicherheit verfügbar!")
Exit Sub
End If
Dim dt As New DataTable
dt = generateDTErstattungen()
If dt.Rows.Count > 0 Then
If vbYes = MsgBox("Möchten Sie " & dt.Rows.Count & " Emails für den Versand der Erstattungsinfo für die Erstattungsart " & cboErstattungsart.SelectedText & " erstellen ?", vbYesNoCancel) Then
Dim listOfTextconserven As New cTextkonserve_LIST(5, "", 19)
For Each row In dt.Rows
Dim spracheMail As String = "EN" 'Defaultsprache
Select Case row.Item("LandKz")
Case "HR", "SRB" : spracheMail = "SRB"
Case "A", "AT", "D", "DE", "CH" : spracheMail = "DE"
Case "RO" : spracheMail = "RO"
Case Else
spracheMail = "DE"
End Select
If listOfTextconserven.LIST.Any(Function(c) c.txt_sprache = spracheMail) Then
Dim r As cTextkonserve = listOfTextconserven.LIST.Find(Function(c) c.txt_sprache = spracheMail)
If r IsNot Nothing Then
Dim Mail_Subject = ""
Dim Mail_HTMLBody = ""
Dim Mail_To = ""
Dim Mail_CC = ""
Dim Mail_BCC = ""
Mail_Subject = r.txt_betreff
Dim TextHTML = ""
TextHTML &= r.txt_text
Mail_Subject = Mail_Subject.Replace("%BelegNr%", row.Item("Belegnummer"))
Mail_Subject = Mail_Subject.Replace("%Belegdatum%", row.Item("Belegdatum"))
Mail_Subject = Mail_Subject.Replace("%Name%", row.Item("Name"))
Mail_Subject = Mail_Subject.Replace("%AbfertigungsNr%", row.Item("AbfertigungsNr"))
Mail_Subject = Mail_Subject.Replace("%FilialenNr%", row.Item("FilialenNr"))
Mail_Subject = Mail_Subject.Replace("%MWST%", row.Item("MWST"))
Mail_Subject = Mail_Subject.Replace("%Betrag%", row.Item("Betrag"))
TextHTML = TextHTML.Replace("%BelegNr%", row.Item("Belegnummer"))
TextHTML = TextHTML.Replace("%Belegdatum%", row.Item("Belegdatum"))
TextHTML = TextHTML.Replace("%Betrag%", row.Item("Betrag"))
TextHTML = TextHTML.Replace("%Name%", row.Item("Name"))
TextHTML = TextHTML.Replace("%AbfertigungsNr%", row.Item("AbfertigungsNr"))
TextHTML = TextHTML.Replace("%MWST%", row.Item("MWST"))
TextHTML = TextHTML.Replace("%FilialenNr%", row.Item("FilialenNr"))
Mail_HTMLBody = "<div style=""font-family:Calibri, Arial"">" & TextHTML & "</div>"
Mail_To = VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdress(row.Item("kdNr"), "Rechnung an")
Mail_CC = VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdressCC(row.Item("kdNr"), "Rechnung an")
Mail_BCC = VERAG_PROG_ALLGEMEIN.cKundenKontakte.getMailAdressBCC(row.Item("kdNr"), "Rechnung an")
Mail_HTMLBody &= "<br><br><br>" & cFakturierung.getSignature(row.Item("LandKz"), 19)
Dim outl As New Outlook.Application
Dim Mail As Microsoft.Office.Interop.Outlook.MailItem
Mail = outl.CreateItem(0)
Mail.Subject = Mail_Subject
Mail.HTMLBody = Mail_HTMLBody
Mail.To = Mail_To
Mail.CC = Mail_CC
Mail.BCC = Mail_BCC
Try
'Mail.SentOnBehalfOfName = SDL.cFakturierung.getDefaultMail("AMBAR") ',"buchhaltung@verag.ag"
Catch ex2 As Exception
MsgBox(ex2.Message)
End Try
Mail.Display()
End If
End If
Next
End If
End If
End Sub
Private Function generateDTErstattungen() As DataTable
Dim dt As New DataTable
If txtFiliale.Text = "" Then Return Nothing
Dim SQLString = "SELECT dbo.tblUStVAntrag.UStVAn_KuNr as kdNr,Rechnungsausgang.RechnungsNr as Belegnummer, cast(Rechnungsausgang.RechnungsDatum as date) as Belegdatum, CONVERT(varchar(512), dbo.tblUStVAntrag.UStVAn_Name) AS Name, CONVERT(varchar(512), ISNULL(dbo.tblUStVAntrag.UStVAn_Straße, '')) AS Straße, CONVERT(varchar(255),
dbo.tblUStVAntrag.UStVAn_PLZ + ' ' + dbo.tblUStVAntrag.UStVAn_Ort) AS Ort, CONVERT(varchar(10), dbo.tblUStVAntrag.UStVAn_LandKz) AS LandKz, CONVERT(varchar(255),
dbo.[Länderverzeichnis für die Außenhandelsstatistik].LandKz + ' ' + SUBSTRING(CONVERT(varchar(10), dbo.tblUStVAntrag.UStVAn_ReDatVon, 20), 6, 2) + '-' + SUBSTRING(CONVERT(varchar(10),
dbo.tblUStVAntrag.UStVAn_ReDatBis, 20), 6, 2) + '/' + SUBSTRING(CONVERT(varchar(10), dbo.tblUStVAntrag.UStVAn_ReDatBis, 20), 1, 4)) AS MWST, dbo.Rechnungsausgang.AbfertigungsNr,
dbo.Rechnungsausgang.FilialenNr, dbo.Rechnungsausgang.UnterNr, ABS(CONVERT(decimal(12, 2),
dbo.Rechnungsausgang.SteuerpflichtigerGesamtbetrag + dbo.Rechnungsausgang.SteuerfreierGesamtbetrag)) AS Betrag, ISNULL(dbo.Kunden.KD_Korrespondenz, '')
AS KorrAdresse
FROM dbo.Rechnungsausgang
INNER JOIN dbo.tblUStVAntrag ON dbo.Rechnungsausgang.AbfertigungsNr = dbo.tblUStVAntrag.AbfertigungsNr AND dbo.Rechnungsausgang.FilialenNr = dbo.tblUStVAntrag.FilialenNr
INNER JOIN dbo.[Länderverzeichnis für die Außenhandelsstatistik] ON dbo.tblUStVAntrag.UStVAn_LandNr = dbo.[Länderverzeichnis für die Außenhandelsstatistik].LandNr
INNER JOIN dbo.Kunden ON dbo.tblUStVAntrag.UStVAn_KuNr = dbo.Kunden.KundenNr
INNER JOIN dbo.tblKundenErweitert ON dbo.tblUStVAntrag.UStVAn_KuNr = tblKundenErweitert.kde_KundenNr and ISNULL(tblKundenErweitert.kde_Erstattungsart, 0) = " & cboErstattungsart.SelectedIndex &
" WHERE dbo.Rechnungsausgang.Rechnungsdatum between '" & datVon.Value.ToShortDateString & "' and '" & datBis.Value.ToShortDateString & "' AND dbo.Rechnungsausgang.FilialenNr = " & txtFiliale.Text & " AND Rechnungsausgang.RechnungsNr is not null"
dt = (New SQL).loadDgvBySql(SQLString, "FMZOLL")
If dt.Rows.Count > 0 Then
Return dt
End If
End Function
End Class