Imports SDL Imports VERAG_PROG_ALLGEMEIN Imports VERAG_PROG_ALLGEMEIN.TESTJSON Public Class frmGesamtsicherheitenMenuNEU Public SQL As New VERAG_PROG_ALLGEMEIN.SQL Dim GesSichRef As VERAG_PROG_ALLGEMEIN.cAufschubKonten Public dataTable As DataTable Public Property Standort As String = "" Public firmaId As Integer Public Sub New() ' Dieser Aufruf ist für den Designer erforderlich. InitializeComponent() ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. End Sub Private Sub frmGesamtsicherheitenNEU_Menu_Load(sender As Object, e As EventArgs) Handles MyBase.Load Select Case Standort Case "Verag GmbH" : firmaId = 2 : chkOffen.Checked = True Case "VERAG AG" : firmaId = 1 : chkOffen.Checked = False Case "IMEX" : firmaId = 20 : chkOffen.Checked = False Case "Verag CS" : firmaId = 11 : chkOffen.Checked = False Case "Unisped GmbH" : firmaId = 21 : chkOffen.Checked = False Case "AMBAR GmbH" : firmaId = 24 : chkOffen.Checked = False Case "Atilla GmbH" : firmaId = 7 : chkOffen.Checked = False End Select cbxStandort.fillWithSQL("SELECT FilialenNr, cast(FilialenNr as varchar(4)) + ' ' + Grenzstelle FROM Filialen WHERE Fil_Status='A' ORDER BY FilialenNr ", True, "FMZOLL", True) cbxWarenort.fillWithSQL("SELECT [wo_warenort],CONCAT([wo_bezeichnung],' - ' ,[wo_knnr]) FROM [tblWarenorte] WHERE [wo_aktiv] ='1' ORDER BY [wo_reihenfolge] ", True, "AVISO", True) 'AND [wo_firma] = '" & firmaId & "' cbxWarenort.DropDownWidth = 150 Me.Text = "Gesamtsicherheiten " & Standort frmHauptfenster.EnableDoubleBuffered(dgvListe) GesSichRef = New VERAG_PROG_ALLGEMEIN.cAufschubKonten(Standort) If GesSichRef.hasEntry = False Then MsgBox("Für den Standort " & Standort & " wurde keine Referenz hingerlegt!") Exit Sub End If lblSaldo.Text = "Saldo: €" & Decimal.Parse(GesSichRef.CalcSaldo()).ToString("N") txtDatVon.Text = Date.Parse("01.01.2001") txtDatBis.Text = Now.ToShortDateString btnMonat.Text = MONAT.ToString("MMMM") btnJahr.Text = JAHR.Year If GesSichRef.brgakto_gs_ATR Then Dim anzahlOffenerGSUeber85Tage As Integer = checkOpenATBs() If anzahlOffenerGSUeber85Tage > 0 Then btnOpenOver85Days.Visible = True End If End If ShowStandort() LoadDGV() End Sub Public Function LoadDGV() Dim sqladdon As String = "" Dim sqlSicherheitssaldo As String = "" If chkOffen.Checked Then sqlSicherheitssaldo &= " HAVING ( COALESCE(MAX(SicherheitsSaldo.gs_SicherheitsSaldo), 0) + COALESCE(MAX(PositionenSaldo.gsp_SicherheitsSaldo), 0) ) <> 0 " If cbxStandort._value <> "" Then sqladdon &= " AND gs_filialenNr = " & cbxStandort._value.ToString If cbxWarenort._value <> "" Then sqladdon &= " AND gs_warenort = '" & cbxWarenort._value.ToString & "'" 'Dim sqlstring As String = ' " select * from (Select gs_gsnr as gs_gsnr, MIN(gs_standort) as gs_standort, MIN(gs_warenort) as gs_warenort, MIN(gs_filialenNr) as gs_filialenNr, min(gs_abfertigungsNr) as gs_abfertigungsNr, MIN(gs_avisoId) as gs_avisoId, ' max(gs_LKWKZ) as gs_LKWKZ, min (gs_datum) as gs_datum, FORMAT( ' (Select SUM( Case 'when gs_art = 'Open' then (gs_sicherheitsbetrag * -1) 'when gs_art = 'Close' then gs_sicherheitsbetrag ' End) As gs_SicherheitsSaldo FROM [tblGesamtsicherheit] where gs_gsnr = meh.gs_gsnr ' ) ' + ' (Select SUM( Case 'when gsp_art = 'Open' then (gsp_sicherheitsbetrag * -1) 'when gsp_art = 'Close' then gsp_sicherheitsbetrag ' End) As gs_SicherheitsSaldo FROM [tblGesamtsicherheitsPositionen] where gsp_gsnr = meh.gs_gsnr ' ) , 'C', 'de-DE') as gs_SicherheitsSaldo ' From (select * from (select gs_gsnr as ding from [tblGesamtsicherheit] where ' gs_freitext like '%" & txtSuchbegriff.Text & "%' OR ' gs_abfertigungsNr like '%" & txtSuchbegriff.Text & "%' OR ' gs_avisoId like '%" & txtSuchbegriff.Text & "%' OR ' gs_ATBNr like '%" & txtSuchbegriff.Text & "%' OR ' gs_LKWKZ like '%" & txtSuchbegriff.Text & "%' OR ' gs_warenort like '%" & txtSuchbegriff.Text & "%' ' ) as tb1 left join [tblGesamtsicherheit] as tb2 on tb1.ding = tb2.gs_gsnr) as meh group by gs_gsnr) as meh2 ' Where gs_standort = '" & Standort & "' " & sqladdon & " ' AND gs_datum > '" & Date.Parse(txtDatVon.Text) & "' ' AND gs_datum < '" & Date.Parse(txtDatBis.Text).AddDays(1).AddSeconds(-1) & "' ORDER BY gs_gsnr" Dim sqlstring As String = "WITH SicherheitsSaldo AS ( SELECT gs_gsnr, SUM(CASE WHEN gs_art = 'Open' THEN -gs_sicherheitsbetrag WHEN gs_art = 'Close' THEN gs_sicherheitsbetrag END) AS gs_SicherheitsSaldo FROM tblGesamtsicherheit GROUP BY gs_gsnr ), PositionenSaldo AS ( SELECT gsp_gsnr, SUM(CASE WHEN gsp_art = 'Open' THEN -gsp_sicherheitsbetrag WHEN gsp_art = 'Close' THEN gsp_sicherheitsbetrag END) AS gsp_SicherheitsSaldo FROM tblGesamtsicherheitsPositionen GROUP BY gsp_gsnr ) SELECT gs.gs_gsnr, MIN(gs.gs_standort) AS gs_standort, MIN(gs.gs_warenort) AS gs_warenort, MIN(gs.gs_filialenNr) AS gs_filialenNr, MIN(gs.gs_abfertigungsNr) AS gs_abfertigungsNr, MIN(gs.gs_avisoId) AS gs_avisoId, MAX(gs.gs_LKWKZ) AS gs_LKWKZ, MIN(gs.gs_datum) AS gs_datum, ( COALESCE(MAX(SicherheitsSaldo.gs_SicherheitsSaldo), 0) + COALESCE(MAX(PositionenSaldo.gsp_SicherheitsSaldo), 0) ) AS gs_SicherheitsSaldo FROM tblGesamtsicherheit gs LEFT JOIN SicherheitsSaldo ON gs.gs_gsnr = SicherheitsSaldo.gs_gsnr LEFT JOIN PositionenSaldo ON gs.gs_gsnr = PositionenSaldo.gsp_gsnr WHERE gs.gs_standort = '" & Standort & "' " & sqladdon & " AND gs.gs_datum BETWEEN '" & Date.Parse(txtDatVon.Text) & "' AND '" & Date.Parse(txtDatBis.Text).AddDays(1).AddSeconds(-1) & "' AND ( gs.gs_freitext LIKE '%" & txtSuchbegriff.Text & "%' OR gs.gs_abfertigungsNr LIKE '%" & txtSuchbegriff.Text & "%' OR gs.gs_avisoId LIKE '%" & txtSuchbegriff.Text & "%' OR gs.gs_ATBNr LIKE '%" & txtSuchbegriff.Text & "%' OR gs.gs_LKWKZ LIKE '%" & txtSuchbegriff.Text & "%' OR gs.gs_warenort LIKE '%" & txtSuchbegriff.Text & "%' ) GROUP BY gs.gs_gsnr " & sqlSicherheitssaldo & "ORDER BY gs.gs_gsnr;" dgvListe.SET_SQL(sqlstring, "AVISO") dgvListe.LOAD() With dgvListe .SelectionMode = DataGridViewSelectionMode.FullRowSelect .RowHeadersWidth = 6 .Columns("gs_standort").Visible = False .Columns("gs_gsnr").HeaderText = "#" .Columns("gs_gsnr").Width = 36 .Columns("gs_filialenNr").HeaderText = "Filiale" .Columns("gs_filialenNr").Width = 43 .Columns("gs_abfertigungsNr").HeaderText = "Abfert.Nr." .Columns("gs_abfertigungsNr").Width = 70 .Columns("gs_datum").Width = 112 .Columns("gs_datum").HeaderText = "Datum" .Columns("gs_SicherheitsSaldo").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill .Columns("gs_SicherheitsSaldo").HeaderText = "offener S-Betrag" .Columns("gs_SicherheitsSaldo").DefaultCellStyle.Format = "c2" .Columns("gs_Warenort").Width = 96 .Columns("gs_Warenort").HeaderText = "Warenort" .Columns("gs_avisoId").Width = 96 .Columns("gs_avisoId").HeaderText = "LKW-ID" .Columns("gs_LKWKZ").HeaderText = "LKW-KZ" End With If dgvListe.Rows.Count = 0 Then Exit Function dataTable = New DataTable() dataTable.Columns.Add("gs_gsnr", GetType(Integer)) dataTable.Columns.Add("gs_isOpen", GetType(Boolean)) For Each row As DataGridViewRow In dgvListe.Rows If Not IsDBNull(row.Cells("gs_SicherheitsSaldo").Value) Then If row.Cells("gs_SicherheitsSaldo").Value <> 0 Then dataTable.Rows.Add(row.Cells("gs_gsnr").Value, True) row.DefaultCellStyle.BackColor = Color.IndianRed Else dataTable.Rows.Add(row.Cells("gs_gsnr").Value, False) row.DefaultCellStyle.BackColor = Color.Green End If End If Next End Function Public Sub ShowStandort() lblReferenzwert.Text = "Referenzwert: €" & CDbl(GesSichRef.brgakto_betrag).ToString("N") lblZollsatz.Text = "Zollsatz: " & GesSichRef.brgakto_gs_zollsatz & "%" lblSaldo.Text = "Saldo: €" & Decimal.Parse(GesSichRef.CalcSaldo()).ToString("N") End Sub Private Sub OpenFRM(sender As Object, e As DataGridViewCellEventArgs) Handles dgvListe.CellDoubleClick Dim frm As New frmGesamtsicherheitenNEU With frm .currentGesSichRef = GesSichRef .gessicherheitID = dgvListe.CurrentRow.Cells("gs_gsnr").Value .Standort = Me.Standort .datum = dgvListe.CurrentRow.Cells("gs_datum").Value .LKWKZ = dgvListe.CurrentRow.Cells("gs_LKWKZ").Value .FilialNummer = dgvListe.CurrentRow.Cells("gs_filialenNr").Value .Abfertigungsnummer = dgvListe.CurrentRow.Cells("gs_abfertigungsNr").Value .warenortID = dgvListe.CurrentRow.Cells("gs_warenort").Value .avisoID = dgvListe.CurrentRow.Cells("gs_avisoId").Value .dataTable = Me.dataTable .firmaId = Me.firmaId End With AddHandler frm.FormClosing, Function() GesSichRef.CalcSaldo() ShowStandort() LoadDGV() Me.BringToFront() End Function frm.Show() End Sub Private Sub btnNeu_Click(sender As Object, e As EventArgs) Handles btnNeu.Click Dim frm As New frmGesamtsicherheitenNEU With frm .currentGesSichRef = GesSichRef .Standort = Me.Standort .datum = Date.Now .Neu = True .dataTable = Me.dataTable .firmaId = Me.firmaId End With AddHandler frm.FormClosing, Function() GesSichRef.CalcSaldo() ShowStandort() LoadDGV() Me.BringToFront() End Function frm.Show(Me) ' frm.Parent = Me End Sub Private Sub lblSaldo_Click(sender As Object, e As EventArgs) Handles lblSaldo.Click lblSaldo.Text = "Saldo: €" & Decimal.Parse(GesSichRef.CalcSaldo()).ToString("N") LoadDGV() End Sub Private Sub chkOffen_CheckedChanged(sender As Object, e As EventArgs) If Me.Visible Then LoadDGV() End Sub Private Sub Keypresses(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Select Case Asc(e.KeyChar) Case 48 To 57, 8, 46, 58, 32, 44, 65 To 90, 97 To 122 ' Zahlen, Backspace, . und : zulassen Case Else ' alle anderen Eingaben unterdrücken e.Handled = True End Select End Sub Private Sub resetSearchfields_Click(sender As Object, e As EventArgs) Handles btnResetFilter.Click txtSuchbegriff.Text = "" : chkOffen.Checked = True txtDatVon.Text = Date.Today.AddDays(-90).ToString("dd.MM.yyyy") txtDatBis.Text = Date.Today.ToString("dd.MM.yyyy") cbxStandort._value = "" cbxWarenort._value = "" btnSucheStarten_Click(sender, e) End Sub Private Sub btnSucheStarten_Click(sender As Object, e As EventArgs) Handles btnSucheStarten.Click Try Date.Parse(txtDatVon.Text) Date.Parse(txtDatBis.Text) If Me.Visible Then LoadDGV() Catch ex As Exception MsgBox("Datum VON und/oder BIS konnte nicht konvertiert werden.") End Try End Sub Dim MONAT As Date = CDate("01." & Now.Month & "." & Now.Year) '.AddMonths(-1) Dim TAG As Date = CDate(Now.ToShortDateString) Dim JAHR As Date = CDate("01.01." & Now.Year) Sub initBtns(MonatJahr) btnMonat.Text = MONAT.ToString("MMMM") btnJahr.Text = JAHR.Year Select Case MonatJahr Case "Monat" DateTimePicker1.Value = MONAT DateTimePicker2.Value = MONAT.AddMonths(1).AddDays(-1) Case "Jahr" DateTimePicker1.Value = JAHR DateTimePicker2.Value = JAHR.AddYears(1).AddDays(-1) 'End If Case "Tag" DateTimePicker1.Value = TAG DateTimePicker2.Value = TAG If TAG = Now.ToShortDateString Then btnTag.Text = "Heute" ElseIf TAG = Now.AddDays(-1).ToShortDateString Then btnTag.Text = "Gestern" ElseIf TAG = Now.AddDays(-2).ToShortDateString Then btnTag.Text = "Vorgestern" ElseIf TAG = Now.AddDays(1).ToShortDateString Then btnTag.Text = "Morgen" Else btnTag.Text = TAG.ToString("dd.MM") End If 'End If Case "" DateTimePicker1.Value = ("01." & Now.Month & "." & Now.Year) DateTimePicker2.Value = Now End Select End Sub Private Sub btnJahr_Click(sender As Object, e As EventArgs) Handles btnJahr.Click initBtns("Jahr") End Sub Private Sub btnPlusJahr_Click(sender As Object, e As EventArgs) Handles btnBisJahr.Click JAHR = JAHR.AddYears(1) initBtns("Jahr") End Sub Private Sub btnMinusJahr_Click(sender As Object, e As EventArgs) Handles btnVonJahr.Click JAHR = JAHR.AddYears(-1) initBtns("Jahr") End Sub Private Sub btnMonat_Click(sender As Object, e As EventArgs) Handles btnMonat.Click initBtns("Monat") End Sub Private Sub btnPlusMonat_Click(sender As Object, e As EventArgs) Handles btnBisMonat.Click MONAT = MONAT.AddMonths(1) initBtns("Monat") End Sub Private Sub btnMinusMonat_Click(sender As Object, e As EventArgs) Handles btnVonMonat.Click MONAT = MONAT.AddMonths(-1) initBtns("Monat") End Sub Private Sub btnTag_Click(sender As Object, e As EventArgs) Handles btnTag.Click initBtns("Tag") End Sub Private Sub btnMinusTag_Click(sender As Object, e As EventArgs) Handles btnVonTag.Click TAG = TAG.AddDays(-1) initBtns("Tag") End Sub Private Sub btnPlusTag_Click(sender As Object, e As EventArgs) Handles btnBisTag.Click TAG = TAG.AddDays(1) initBtns("Tag") End Sub Private Sub DateTimePicker1_ValueChanged(sender As Object, e As EventArgs) Handles DateTimePicker1.ValueChanged txtDatVon._value = CDate(sender.value).ToShortDateString btnSucheStarten_Click(sender, e) End Sub Private Sub DateTimePicker2_ValueChanged(sender As Object, e As EventArgs) Handles DateTimePicker2.ValueChanged txtDatBis._value = CDate(sender.value).ToShortDateString btnSucheStarten_Click(sender, e) End Sub Function setNullToZero(s As String, Optional type As String = "") If s = "" Then Dim zero As Double = 0 Return zero Else Return s End If End Function Private Sub btnOpenOver85Days_Click(sender As Object, e As EventArgs) Handles btnOpenOver85Days.Click resetSearchfields_Click(sender, e) chkOffen.Checked = True DateTimePicker1.Value = Now.AddYears(-20) DateTimePicker2.Value = Now.AddDays(-85) btnSucheStarten_Click(sender, e) End Sub Private Function checkOpenATBs() As Integer Dim anzahlOffenerGSUeber85Tage As Integer ' Dim sqlstring As String = "select count(*) as anzahlOffeneATBs from (Select gs_gsnr as gs_gsnr, MIN(gs_standort) as gs_standort,min (gs_datum) as gs_datum, ' (Select SUM( Case 'when gs_art = 'Open' then (gs_sicherheitsbetrag * -1) 'when gs_art = 'Close' then gs_sicherheitsbetrag ' End) As gs_SicherheitsSaldo FROM [tblGesamtsicherheit] where gs_gsnr = meh.gs_gsnr ' ) ' + ' (Select SUM( Case 'when gsp_art = 'Open' then (gsp_sicherheitsbetrag * -1) 'when gsp_art = 'Close' then gsp_sicherheitsbetrag ' End) As gs_SicherheitsSaldo FROM [tblGesamtsicherheitsPositionen] where gsp_gsnr = meh.gs_gsnr ' ) as Sicherheitssaldo ' From [tblGesamtsicherheit] as meh group by gs_gsnr) as meh2 ' Where gs_standort = '" & Standort & "'AND Sicherheitssaldo <> 0 AND gs_datum < '" & Date.Now().AddDays(-85) & "'" Dim sqlstring As String = "WITH SicherheitsSaldo AS ( SELECT gs_gsnr, SUM(CASE WHEN gs_art = 'Open' THEN -gs_sicherheitsbetrag WHEN gs_art = 'Close' THEN gs_sicherheitsbetrag END) AS gs_SicherheitsSaldo FROM tblGesamtsicherheit GROUP BY gs_gsnr ), PositionenSaldo AS ( SELECT gsp_gsnr, SUM(CASE WHEN gsp_art = 'Open' THEN -gsp_sicherheitsbetrag WHEN gsp_art = 'Close' THEN gsp_sicherheitsbetrag END) AS gsp_SicherheitsSaldo FROM tblGesamtsicherheitsPositionen GROUP BY gsp_gsnr ) SELECT COUNT(*) AS anzahlOffeneATBs FROM ( SELECT gs.gs_gsnr, MIN(gs.gs_standort) AS gs_standort, MIN(gs.gs_datum) AS gs_datum, COALESCE(SUM(SicherheitsSaldo.gs_SicherheitsSaldo), 0) + COALESCE(SUM(PositionenSaldo.gsp_SicherheitsSaldo), 0) AS Sicherheitssaldo FROM tblGesamtsicherheit gs LEFT JOIN SicherheitsSaldo ON gs.gs_gsnr = SicherheitsSaldo.gs_gsnr LEFT JOIN PositionenSaldo ON gs.gs_gsnr = PositionenSaldo.gsp_gsnr WHERE gs.gs_standort = '" & Standort & "' AND gs.gs_datum < '" & Date.Now().AddDays(-85) & "' GROUP BY gs.gs_gsnr ) AS meh2 WHERE meh2.Sicherheitssaldo <> 0;" Dim dtNew As DataTable = SQL.loadDgvBySql(sqlstring, "AVISO", 100, True) If (dtNew.Rows(0).Item(0) IsNot DBNull.Value) Then anzahlOffenerGSUeber85Tage = dtNew.Rows(0).Item(0) If anzahlOffenerGSUeber85Tage > 0 Then MsgBox("Es sind " & anzahlOffenerGSUeber85Tage & " ATBs offen, die älter als 85 Tage sind!") End If Return anzahlOffenerGSUeber85Tage End If End Function Private Sub ExportCSVToolStripMenuItem_Click_1(sender As Object, e As EventArgs) Handles ListeToolStripMenuItem.Click SDL.cProgramFunctions.genExcelFromDGV_NEW(dgvListe) End Sub Private Sub ExportCSV2ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ReferenzlisteZollamtToolStripMenuItem.Click, DetaillisteToolStripMenuItem.Click If dgvListe.Rows.Count = 0 Then MsgBox("keine Daten vorhanden!") Exit Sub End If Dim list As New List(Of Integer) For Each row As DataGridViewRow In dgvListe.Rows list.Add(CInt(row.Cells("gs_gsnr").Value)) Next Dim frm As New frmGesamtsicherheitenNEU Dim datumVon As Date = CDate(txtDatVon.Text) datumVon = datumVon.AddDays(-1) If sender.ToString = "Detailliste" Then frm.LoadDataTableSicherheitenForExport2(list, datumVon.ToShortDateString, txtDatBis.Text) ElseIf sender.ToString = "Referenzliste-Zollamt" Then frm.LoadDataTableSicherheitenForExport(list, datumVon.ToShortDateString, txtDatBis.Text, Standort) Else MsgBox("Funktion nicht definiert!") Exit Sub End If SDL.cProgramFunctions.genExcelFromDT_NEW(frm.dtSicherheiten) End Sub Private Sub chkOffen_CheckedChanged_1(sender As Object, e As EventArgs) Handles chkOffen.CheckedChanged If txtDatVon._value <> "" AndAlso txtDatBis._value <> "" Then btnSucheStarten.PerformClick() End Sub Private Sub SaldenNeuBerechnenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SaldenNeuBerechnenToolStripMenuItem.Click lblSaldo.Text = "Saldo: €" & Decimal.Parse(GesSichRef.CalcSaldo()).ToString("N") MsgBox("Salden wurden neu berechnet") End Sub Private Sub FlatButton1_Click(sender As Object, e As EventArgs) Handles btnExcel.Click Select Case Standort Case "Verag GmbH" Process.Start("https://file.verag.ag:5001/d/s/pkjsynkkXrTgPm85JLVFWAHem4NuF6IO/i4_Ss9mG9jR7hB4wStoIbzhvYzlJJJPv-BbegLJoGuQk") Case "VERAG AG" Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER("DOKUMENTE", "VORLAGEN", "SONSTIGE", "", "", "Gesamtsicherheit_VERAG_AG") DS.OPEN_SINGLE_ORIG() Case "Verag CS" Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER("DOKUMENTE", "VORLAGEN", "SONSTIGE", "", "", "Gesamtsicherheit_VERAG_CS") DS.OPEN_SINGLE_ORIG() Case "IMEX" Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER("DOKUMENTE", "VORLAGEN", "SONSTIGE", "IMEX", "", "Gesamtsicherheit_IMEX") DS.OPEN_SINGLE_ORIG() End Select End Sub Private Sub PictureBox5_Click(sender As Object, e As EventArgs) Handles PictureBox5.Click Dim webAddress As String = "https://wiki.verag.ag/e/de/software/aviso/howtos/Gesamtsicherheiten" Process.Start(webAddress) End Sub End Class