From 34f124916b7c3518b6fceb4f9390965ec2bef58e Mon Sep 17 00:00:00 2001 From: "d.breimaier" Date: Fri, 20 Feb 2026 13:08:45 +0100 Subject: [PATCH] BH, Helferfunktionen, CHAT Refactor!!!!!! --- SDL/Fakturierung/cFakturierung.vb | 6 +- SDL/My Project/AssemblyInfo.vb | 4 +- SDL/USTV/frmUSTVoffeneAntraege.vb | 113 ++++++++----- SDL/USTV/usrCntlUSTV.vb | 4 +- SDL/buchhaltung/usrCntlBH.vb | 20 ++- SDL/cProgramFunctions.vb | 12 +- VERAG_PROG_ALLGEMEIN/Classes/cIDS.vb | 28 +++- VERAG_PROG_ALLGEMEIN/Classes/cMessenger.vb | 73 ++++++++- VERAG_PROG_ALLGEMEIN/Classes/cRMC.vb | 25 +++ VERAG_PROG_ALLGEMEIN/Classes/cUTA.vb | 25 +++ .../Messenger/frmMessenger.vb | 148 +++++++++++++++--- .../Schnittstellen/MSE/cMSEAPI.vb | 25 +++ 12 files changed, 401 insertions(+), 82 deletions(-) diff --git a/SDL/Fakturierung/cFakturierung.vb b/SDL/Fakturierung/cFakturierung.vb index b280d0d8..1683ad09 100644 --- a/SDL/Fakturierung/cFakturierung.vb +++ b/SDL/Fakturierung/cFakturierung.vb @@ -320,9 +320,9 @@ Public Class cFakturierung If RECHNUNG_KD.Zahlungsziel IsNot Nothing AndAlso IsNumeric(RECHNUNG_KD.Zahlungsziel) Then ZZTage = RECHNUNG_KD.Zahlungsziel - If ZZTage > 14 AndAlso RECHNUNG.Firma_ID = 19 AndAlso RECHNUNG.FilialenNr = 8001 Then - ZZTage = 14 - End If + 'If ZZTage > 14 AndAlso RECHNUNG.Firma_ID = 19 AndAlso RECHNUNG.FilialenNr = 8001 Then + ' ZZTage = 14 'Hier aus DEebitor überschreiben! + 'End If End If Select Case RECHNUNG.[BelegartenNr] diff --git a/SDL/My Project/AssemblyInfo.vb b/SDL/My Project/AssemblyInfo.vb index 90685699..bdbe9ef5 100644 --- a/SDL/My Project/AssemblyInfo.vb +++ b/SDL/My Project/AssemblyInfo.vb @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' übernehmen, indem Sie "*" eingeben: ' - - + + diff --git a/SDL/USTV/frmUSTVoffeneAntraege.vb b/SDL/USTV/frmUSTVoffeneAntraege.vb index 54e33786..3bd381fc 100644 --- a/SDL/USTV/frmUSTVoffeneAntraege.vb +++ b/SDL/USTV/frmUSTVoffeneAntraege.vb @@ -1,5 +1,7 @@ Imports System.Windows.Documents +Imports com.sun.org.apache.bcel.internal.generic Imports java.awt.geom +Imports MDM_Worker Imports VERAG_PROG_ALLGEMEIN Public Class frmUSTVoffeneAntraege @@ -1089,57 +1091,88 @@ Public Class frmUSTVoffeneAntraege End Sub Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click - Dim SQLQuery As String = "" + + Dim dtfehlendePDF As New DataTable + Dim dtPartInvoicesIDS As New DataTable + Select Case LIEFERANT.ToString.ToLower - Case "plose" : SQLQuery = "select [plInv_SupplierRechnungsNr] as RechnungsNr,plInv_SupplierRechnungsDatum as Rechnungsdatum,Adressen.AdressenNr,Adressen.[Name 1] as Kunde, kde_keineMWSt as keineMWST from [tblPLOSE_Inv_Data] INNER JOIN Adressen on [plInv_PLOSEKundennummer]=Adressen.PLOSEKundenNr INNER JOIN tblKundenErweitert on AdressenNr = kde_KundenNr where [plInv_daId] is null and cast([plInv_SupplierRechnungsDatum] as Date) between '" & dat_Sum_Von.Value & "' and '" & dat_Sum_Bis.Value & "' group by plInv_SupplierRechnungsNr, Adressen.AdressenNr, Adressen.[Name 1], plInv_SupplierRechnungsDatum, kde_keineMWSt" - Case "rmc" : SQLQuery = "select rmc_reNr as RechnungsNr,rmc_reDatum AS Rechnungsdatum, Adressen.AdressenNr as KundenNr,Adressen.[Name 1] as Kunde, kde_keineMWSt as keineMWST from [tblRMCImport] INNER JOIN Adressen on WölflKundenNr=[rmc_kdNr] or weitereWölflKundenNr=[rmc_kdNr] INNER JOIN tblKundenErweitert on AdressenNr = kde_KundenNr where rmc_daId is null and cast([rmc_reDatum] as Date) between '" & dat_Sum_Von.Value & "' and '" & dat_Sum_Bis.Value & "' group by rmc_reNr, Adressen.AdressenNr, Adressen.[Name 1],rmc_reDatum, kde_keineMWSt " - Case "mse" : SQLQuery = "select invoice_id as RechnungsNr,[invoice_date] as Rechnungsdatum, Adressen.AdressenNr as KundenNr,Adressen.[Name 1] as Kunde, kde_keineMWSt as keineMWST from tblMSEInvoices inner join [tblMSECustomers] on [customer_number] = [customer_id] INNER JOIN Adressen on Adressen.MSEKundenNr = [customer_number] INNER JOIN tblKundenErweitert on AdressenNr = kde_KundenNr where daId is null and cast(invoice_date as Date) between '" & dat_Sum_Von.Value & "' and '" & dat_Sum_Bis.Value & "' group by invoice_id, Adressen.AdressenNr, Adressen.[Name 1], invoice_date, kde_keineMWSt" - Case "uta" : SQLQuery = " SELECT U.Abrechnungsnummer AS Abrechnungsnummer,U.Rechnungsnummer_pro_Lieferland,U.Lieferland,CAST(U.Rechnungsdatum AS date) AS Rechnungsdatum,A.AdressenNr AS KundenNr,A.UTAKundenNr AS UTAKundenNr,A.[Name 1] AS Kunde,A.LandKz, kde_keineMWSt as keineMWST FROM tblUTAImportNew U INNER JOIN Adressen A ON A.UTAKundenNr = U.Kundennummer INNER JOIN tblKundenErweitert on A.AdressenNr = kde_KundenNr WHERE U.daId IS NULL AND CAST(U.Rechnungsdatum AS date) BETWEEN '" & dat_Sum_Von.Value & "' AND '" & dat_Sum_Bis.Value & "' AND NOT (A.LandKz = 'RO' AND U.Lieferland = 'ROM') GROUP BY U.Abrechnungsnummer,U.Rechnungsnummer_pro_Lieferland,U.Lieferland,U.Rechnungsdatum,A.AdressenNr,A.UTAKundenNr ,A.[Name 1],A.LandKz, kde_keineMWSt ORDER BY U.Rechnungsdatum" - Case "ids" : SQLQuery = "select Invoicenumber as RechnungsNr,YearMonthDay as Rechnungsdatum, Adressen.AdressenNr as KundenNr,Adressen.[Name 1] as Kunde, kde_keineMWSt from tblIDSInvoicesNew Inner join [tbl_IDS_Kunden] on [tbl_IDS_Kunden].CustomerCode =tblIDSInvoicesNew.CustomerCode and isnull([tbl_IDS_Kunden].KdNrAlt, 1) = 0 Inner join Adressen on Adressen.AdressenNr = [tbl_IDS_Kunden].KdNrVERAG INNER JOIN tblKundenErweitert on Adressen.AdressenNr = kde_KundenNr where DocumentName is null and cast(YearMonthDay as Date) between '" & dat_Sum_Von.Value & "' and '" & dat_Sum_Bis.Value & "' group by Invoicenumber, Adressen.AdressenNr, Adressen.[Name 1], YearMonthDay, kde_keineMWSt" - Case Else : SQLQuery = "" + Case "plose" + + Dim LIEFERANT As cPLOSE_Inv_Data + dtfehlendePDF = LIEFERANT.checkPDFInvoices(dat_Sum_Von.Value, dat_Sum_Bis.Value) + + Case "rmc" + Dim LIEFERANT As cRMC + dtfehlendePDF = LIEFERANT.checkPDFInvoices(dat_Sum_Von.Value, dat_Sum_Bis.Value) + + Case "mse" + + Dim LIEFERANT As cMSEAPI + dtfehlendePDF = LIEFERANT.checkPDFInvoices(dat_Sum_Von.Value, dat_Sum_Bis.Value) + + + Case "uta" + + Dim LIEFERANT As cUTA + dtfehlendePDF = LIEFERANT.checkPDFInvoices(dat_Sum_Von.Value, dat_Sum_Bis.Value) + + + Case "ids" + Dim LIEFERANT As cIDS + dtfehlendePDF = LIEFERANT.checkPDFInvoices(dat_Sum_Von.Value, dat_Sum_Bis.Value) + dtPartInvoicesIDS = LIEFERANT.checkPartInvoices(dat_Sum_Von.Value, dat_Sum_Bis.Value) + + + Case "verag" + + MsgBox("PDF wird zur Laufzeit aus RE-Daten generiert") + Exit Sub + + Case Else + + MsgBox("Funktion nur pro Lieferant möglich!") + Exit Sub + End Select Dim fehlendePDFs As Integer = 0 - If SQLQuery <> "" Then - Dim dtfehlendePDF As DataTable = (New SQL).loadDgvBySql(SQLQuery, "FMZOLL") - MsgBox("Anzahl fehlende PDFs: " & dtfehlendePDF.Rows.Count & IIf(CDate(dat_Sum_Von.Value).Year <= 2024 OrElse CDate(dat_Sum_Bis.Value).Year <= 2024, vbNewLine & "PDF-Rechnungen vor 2025 wurden tlw. nicht importiert!", "")) - If dtfehlendePDF.Rows.Count > 0 Then - If vbYes = MsgBox("Details der fehlenden PDF-Rechnungen anzeigen?", vbYesNo) Then - cProgramFunctions.genExcelFromDT_NEW(dtfehlendePDF,,, "Fehlende PDF-Rechnungen: " & dat_Sum_Von.Value.ToShortDateString & " - " & dat_Sum_Bis.Value.ToShortDateString) + MsgBox("Anzahl fehlende PDFs: " & dtfehlendePDF.Rows.Count & IIf(CDate(dat_Sum_Von.Value).Year <= 2024 OrElse CDate(dat_Sum_Bis.Value).Year <= 2024, vbNewLine & "PDF-Rechnungen vor 2025 wurden tlw. nicht importiert!", "")) + + If dtfehlendePDF.Rows.Count > 0 Then + If vbYes = MsgBox("Details der fehlenden PDF-Rechnungen anzeigen?", vbYesNo) Then + cProgramFunctions.genExcelFromDT_NEW(dtfehlendePDF,,, "Fehlende PDF-Rechnungen: " & dat_Sum_Von.Value.ToShortDateString & " - " & dat_Sum_Bis.Value.ToShortDateString) - End If End If - 'extra bei IDS -> wenn nicht korrekt verarbeitet/gesetzt!! - If LIEFERANT.ToString.ToLower = "ids" Then - Dim IDS As cIDS - Dim dt = IDS.checkInvoices(dat_Sum_Von.Value, dat_Sum_Bis.Value) - - If dt.Rows.Count > 0 Then - cProgramFunctions.genExcelFromDT_NEW(dt,,, "Fehlende PDF-Teilrechnungen inkl. Datensatz " & dat_Sum_Von.Value.ToShortDateString & " - " & dat_Sum_Bis.Value.ToShortDateString) - If dt.Rows.Count <= 10 Then - If vbYes = MsgBox(dt.Rows.Count & " Gesamtrechnungen der fehlenden PDF-Teilrechnungen anzeigen?", vbYesNo) Then - For Each row In dt.Rows - If row.item("daId") IsNot Nothing AndAlso IsNumeric(row.item("daId")) AndAlso CInt(row.item("daId")) > 0 Then - Dim DS As New cDATENSERVER(row.item("daId")) - Dim pathPDF = DS.GET_TOP1_PATH - If pathPDF <> "" Then Process.Start(pathPDF) - End If - - Next - End If - End If - - End If - - End If - - Else - MsgBox("Funktion nur pro Lieferant möglich!") End If + 'extra bei IDS ->Prüft ob es zur Gesamtrechnung Teilrechnungen gibt!! + If LIEFERANT.ToString.ToLower = "ids" Then + If dtPartInvoicesIDS.Rows.Count > 0 Then + + If vbYes = MsgBox("Es fehlen " & dtPartInvoicesIDS.Rows.Count & " Teilrechnungen" & vbNewLine & "Details der fehlenden Teilrechnungen anzeigen?", vbYesNo) Then + cProgramFunctions.genExcelFromDT_NEW(dtPartInvoicesIDS,,, "Fehlende PDF-Teilrechnungen inkl. Datensatz " & dat_Sum_Von.Value.ToShortDateString & " - " & dat_Sum_Bis.Value.ToShortDateString) + End If + + + If dtPartInvoicesIDS.Rows.Count <= 10 Then + If vbYes = MsgBox(dtPartInvoicesIDS.Rows.Count & " Gesamtrechnungen der fehlenden PDF-Teilrechnungen anzeigen?", vbYesNo) Then + For Each row In dtPartInvoicesIDS.Rows + If row.item("daId") IsNot Nothing AndAlso IsNumeric(row.item("daId")) AndAlso CInt(row.item("daId")) > 0 Then + Dim DS As New cDATENSERVER(row.item("daId")) + Dim pathPDF = DS.GET_TOP1_PATH + If pathPDF <> "" Then Process.Start(pathPDF) + End If + + Next + End If + End If + + End If + + End If diff --git a/SDL/USTV/usrCntlUSTV.vb b/SDL/USTV/usrCntlUSTV.vb index 19418932..da7ad4e0 100644 --- a/SDL/USTV/usrCntlUSTV.vb +++ b/SDL/USTV/usrCntlUSTV.vb @@ -401,7 +401,7 @@ Public Class usrCntlUSTV ' AND cast( [UStVAn_USteuerbetragEUR] as decimal(17,2))-cast( [UStVAn_ErstattungsbetragEUR] as decimal(17,2))<>0 ' AND UStVAn_AntragEingereichtAm is not null ' order by UStVAn_KuNr,UStVAn_Name,datepart(year,[UStVAn_ReDatVon] ) desc,LandKz,[UStVAn_ReDatVon] desc" - Dim sqlStr = "SELECT [UStVAn_ID] as ID,[UStVAn_KuNr] as KundenNr,[UStVAn_Name] as Kundename,Adressen.LandKz as Land_Kunde, case when UstIdKz is not null and UstIdNr is not null THEN UstIdKz +'' + UstIdNr ELSE isnull(Steuernummer,'') END as SteuerUIDNr, LfdA .LandKz Land_Antrag,cast([UStVAn_ReDatVon] as Date) as ReDatVon,cast([UStVAn_ReDatBis] as Date) as ReDatBis , cast(UStVAn_AntragEingereichtAm as Date) as EingereichtAm,[UStVAn_3470] as An3470 ,[UStVAn_Währungscode] as Währung,[UStVAn_USteuerbetrag] as Steuerbetrag,[UStVAn_Erstattungsbetrag] as Erstattungsbetrag,[UStVAn_USteuerbetragEUR] as SteuerbetragEUR,[UStVAn_ErstattungsbetragEUR] as ErstattungsbetragEUR,(cast([UStVAn_USteuerbetragEUR] as decimal(17,2)) - cast( [UStVAn_ErstattungsbetragEUR] as decimal(17,2))) as DifferenzbetragEUR, UStVAn_VZBetrag as Vorauszahlungsbetrag, [UStVAn_Sachbearbeiter] as Sachbearbeiter, UStVAn_AntragArt as Art, stnr.[StNrFürRückerstattungUSt] as SteuerNr + Dim sqlStr = "SELECT [UStVAn_ID] as ID,[UStVAn_KuNr] as KDNR,[UStVAn_Name] as Kundename,Adressen.LandKz as LKZ_KD, case when UstIdKz is not null and UstIdNr is not null THEN UstIdKz +'' + UstIdNr ELSE isnull(Steuernummer,'') END as SteuerUIDNr, LfdA.LandKz as LKZ,cast([UStVAn_ReDatVon] as Date) as ReDatVon,cast([UStVAn_ReDatBis] as Date) as ReDatBis , cast(UStVAn_AntragEingereichtAm as Date) as EingereichtAm,[UStVAn_3470] as An3470 ,[UStVAn_Währungscode] as WKZ,[UStVAn_USteuerbetrag] as Steuerbetrag,[UStVAn_Erstattungsbetrag] as Erstattungsbetrag,[UStVAn_USteuerbetragEUR] as SteuerbetragEUR,[UStVAn_ErstattungsbetragEUR] as ErstattungsbetragEUR,(cast([UStVAn_USteuerbetragEUR] as decimal(17,2)) - cast( [UStVAn_ErstattungsbetragEUR] as decimal(17,2))) as DifferenzbetragEUR, UStVAn_VZBetrag as VZ, [UStVAn_Sachbearbeiter] as Sachbearbeiter, UStVAn_AntragArt as Art, stnr.[StNrFürRückerstattungUSt] as SteuerNr FROM [tblUStVAntrag] inner join [Länderverzeichnis für die Außenhandelsstatistik] as LfdA on UStVAn_LandNr=Landnr inner join Adressen on AdressenNr=UStVAn_KuNr @@ -413,7 +413,7 @@ Public Class usrCntlUSTV Dim dt = SQL.loadDgvBySql(sqlStr, "FMZOLL") If dt IsNot Nothing AndAlso dt.Rows.Count > 0 Then - cProgramFunctions.genExcelFromDT_NEW(dt, {"J1:M" & (dt.Rows.Count + 1)},,,,, True) + cProgramFunctions.genExcelFromDT_NEW(dt, ,,,,, True,,,,,, {"L1:Q" & (dt.Rows.Count + 1)}) Else MsgBox("Keine Daten!") End If diff --git a/SDL/buchhaltung/usrCntlBH.vb b/SDL/buchhaltung/usrCntlBH.vb index 70407466..14053b65 100644 --- a/SDL/buchhaltung/usrCntlBH.vb +++ b/SDL/buchhaltung/usrCntlBH.vb @@ -1035,7 +1035,7 @@ Public Class usrCntlBH End Function - Function gen_RECHNUNG_BySPEDBUCH(KdNr As String, SPEDBUCH As VERAG_PROG_ALLGEMEIN.cSpeditionsbuch, ByRef RK_ID As Integer, ByRef Fusstext As String) + Function gen_RECHNUNG_BySPEDBUCH(KdNr As String, SPEDBUCH As VERAG_PROG_ALLGEMEIN.cSpeditionsbuch, ByRef RK_ID As Integer, ByRef Fusstext As String, ZahlungszielAusDebitor As Integer) Try If KdNr = "" Then Return False @@ -1105,10 +1105,14 @@ Public Class usrCntlBH RG.Packstücke_und_Warenbezeichnung = "NACHBERECHNUNG VON VERZUGSZINSEN" & vbNewLine & SPEDBUCH.Vermerk 'RG.EMailRechnungstext = Fusstext - If Not IsDBNull(KD.Zahlungsziel) AndAlso IsNumeric(KD.Zahlungsziel) Then - Dim Zahlungsziel As Integer = CInt(KD.Zahlungsziel) - RG.Nettozahlungsziel = IIf(Zahlungsziel > 14, 14, KD.Zahlungsziel) - End If + 'IN DIESEM FALL IMMER AUS DEBITOR NEHMEN!!! + + 'If Not IsDBNull(KD.Zahlungsziel) AndAlso IsNumeric(KD.Zahlungsziel) Then + ' Dim Zahlungsziel As Integer = CInt(KD.Zahlungsziel) + ' RG.Nettozahlungsziel = IIf(Zahlungsziel > 14, 14, KD.Zahlungsziel) + 'End If + + RG.Nettozahlungsziel = ZahlungszielAusDebitor RG.SteuerpflichtigerGesamtbetrag = 0 RG.SteuerfreierGesamtbetrag = 0 @@ -1245,7 +1249,7 @@ Public Class usrCntlBH Private Sub btnZNBverrechnen_Click(sender As Object, e As EventArgs) Handles btnZNBverrechnen.Click If txtZRbis.Text = "" OrElse Not IsDate(txtZRbis.Text) Then - MsgBox("Abrechnungdatum setzen!") + MsgBox("Abrechnungdatum (Zahlungen bis) setzen!") txtZRbis.Focus() Exit Sub End If @@ -1255,7 +1259,7 @@ Public Class usrCntlBH LimitBEtrag = CInt(txtAbBetragAbrechnen.Text) End If - Dim dt_Main As DataTable = SQL.loadDgvBySql_Param("Select [kundenNr],SUM([zinsbetrag]) as Zinsbetrag, zahlungsperiode_start,zahlungsperiode_ende FROM [VERAG].[dbo].[tblMDM_Zinsberechnung] where [verrechnet] Is null group by [kundenNr], zahlungsperiode_start, zahlungsperiode_ende" & IIf(LimitBEtrag > 0, " having SUM([zinsbetrag]) >= " & LimitBEtrag, ""), "FMZOLL") + Dim dt_Main As DataTable = SQL.loadDgvBySql_Param("Select [kundenNr],SUM([zinsbetrag]) as Zinsbetrag,max(belegZahlungsziel) as belegZahlungsziel , zahlungsperiode_start,zahlungsperiode_ende FROM [VERAG].[dbo].[tblMDM_Zinsberechnung] where [verrechnet] Is null group by [kundenNr], zahlungsperiode_start, zahlungsperiode_ende" & IIf(LimitBEtrag > 0, " having SUM([zinsbetrag]) >= " & LimitBEtrag, ""), "FMZOLL") If dt_Main.Rows.Count > 0 Then Dim kundenNr As String = "" @@ -1342,7 +1346,7 @@ Public Class usrCntlBH Dim SPEDBUCH As VERAG_PROG_ALLGEMEIN.cSpeditionsbuch = Nothing Dim RK_ID As Integer = -1 If Not gen_SPEDBUCH_ByKdNr(R("kundenNr"), SPEDBUCH, CDate(txtZRbis.Text).ToShortDateString, vermerk) Then verarbOK = False - If Not gen_RECHNUNG_BySPEDBUCH(R("kundenNr"), SPEDBUCH, RK_ID, Fußtext) Then verarbOK = False + If Not gen_RECHNUNG_BySPEDBUCH(R("kundenNr"), SPEDBUCH, RK_ID, Fußtext, R("belegZahlungsziel")) Then verarbOK = False If verarbOK Then SQL.doSQL("UPDATE [tblMDM_Zinsberechnung] SET [verrechnet]=GETDATE(), RK_ID = " & RK_ID & " WHERE [verrechnet] Is null And kundenNr='" & R("kundenNr") & "' ", "FMZOLL") diff --git a/SDL/cProgramFunctions.vb b/SDL/cProgramFunctions.vb index 098719b6..e29ef0b6 100644 --- a/SDL/cProgramFunctions.vb +++ b/SDL/cProgramFunctions.vb @@ -1131,7 +1131,7 @@ Public Class cProgramFunctions Return "" End Function - Public Shared Function genExcelFromDT_NEW(dt As DataTable, Optional rangeAsWaehrung() As String = Nothing, Optional ShowAutoFilter As Boolean = True, Optional HeaderTxt As String = "", Optional HeaderTxt2 As String = "", Optional waehrungsZeichen As String = "€", Optional fitCellsToContent As Boolean = False, Optional mergeHeadersToCell As Char = "", Optional Landscape As Boolean = False, Optional fitToOnePage As Boolean = False, Optional openFile As Boolean = True, Optional fitWideToOnePage As Boolean = False) As String + Public Shared Function genExcelFromDT_NEW(dt As DataTable, Optional rangeAsWaehrung() As String = Nothing, Optional ShowAutoFilter As Boolean = True, Optional HeaderTxt As String = "", Optional HeaderTxt2 As String = "", Optional waehrungsZeichen As String = "€", Optional fitCellsToContent As Boolean = False, Optional mergeHeadersToCell As Char = "", Optional Landscape As Boolean = False, Optional fitToOnePage As Boolean = False, Optional openFile As Boolean = True, Optional fitWideToOnePage As Boolean = False, Optional rangeAsBuchhaltung() As String = Nothing) As String Try Dim sPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Personal) & "\VERAG\SDL\tmp\" ' My.Computer.FileSystem.GetTempFileName @@ -1156,6 +1156,16 @@ Public Class cProgramFunctions Next End If + If rangeAsBuchhaltung IsNot Nothing Then + For Each r In rangeAsBuchhaltung + Try + wb.Worksheets(0).Range(r).Style.NumberFormat.SetFormat("_-* #,##0.00_-;-* #,##0.00_-;_-* ""-""??_-;_-@_-") + Catch ex As Exception + MsgBox(ex.Message & ex.StackTrace) + End Try + Next + End If + If HeaderTxt <> "" Then wb.Worksheets(0).FirstRow.InsertRowsAbove(2) wb.Worksheets(0).Range("A1").Value = HeaderTxt diff --git a/VERAG_PROG_ALLGEMEIN/Classes/cIDS.vb b/VERAG_PROG_ALLGEMEIN/Classes/cIDS.vb index fb22d244..fb210b0b 100644 --- a/VERAG_PROG_ALLGEMEIN/Classes/cIDS.vb +++ b/VERAG_PROG_ALLGEMEIN/Classes/cIDS.vb @@ -663,10 +663,36 @@ Public Class cIDS Return "" End Function - Public Shared Function checkInvoices(Optional reDatVon As Date = Nothing, Optional reDatBis As Date = Nothing) As DataTable + Public Shared Function checkPDFInvoices(Optional reDatVon As Date = Nothing, Optional reDatBis As Date = Nothing) As DataTable Try Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL + Dim sqlTime As String = "" + + If IsDate(reDatVon) AndAlso CDate(reDatVon) > "01.01.2020" AndAlso IsDate(reDatBis) AndAlso CDate(reDatBis) > "01.01.2020" Then + sqlTime = " And cast(YearMonthDay as Date) between '" & reDatVon.ToShortDateString & "' and '" & reDatBis.ToShortDateString & "'" + End If + + Dim SQLstr = "select Invoicenumber as RechnungsNr,YearMonthDay as Rechnungsdatum, Adressen.AdressenNr as KundenNr,Adressen.[Name 1] as Kunde, kde_keineMWSt from tblIDSInvoicesNew Inner join [tbl_IDS_Kunden] on [tbl_IDS_Kunden].CustomerCode =tblIDSInvoicesNew.CustomerCode and isnull([tbl_IDS_Kunden].KdNrAlt, 1) = 0 Inner join Adressen on Adressen.AdressenNr = [tbl_IDS_Kunden].KdNrVERAG INNER JOIN tblKundenErweitert on Adressen.AdressenNr = kde_KundenNr where DocumentName is null " & sqlTime & " group by Invoicenumber, Adressen.AdressenNr, Adressen.[Name 1], YearMonthDay, kde_keineMWSt" + + Dim dt = (New VERAG_PROG_ALLGEMEIN.SQL).loadDgvBySql(SQLstr, "FMZOLL") + + Return dt + + + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try + + Return Nothing + + End Function + + Public Shared Function checkPartInvoices(Optional reDatVon As Date = Nothing, Optional reDatBis As Date = Nothing) As DataTable + Try + 'Prüft, ob es zu Gesamtrechnungen Teilrechnungen gibt! + Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL + Dim SQLstr = " " If IsDate(reDatVon) AndAlso CDate(reDatVon) > "01.01.2020" AndAlso IsDate(reDatBis) AndAlso CDate(reDatBis) > "01.01.2020" Then diff --git a/VERAG_PROG_ALLGEMEIN/Classes/cMessenger.vb b/VERAG_PROG_ALLGEMEIN/Classes/cMessenger.vb index 14efedf9..3d9bf004 100644 --- a/VERAG_PROG_ALLGEMEIN/Classes/cMessenger.vb +++ b/VERAG_PROG_ALLGEMEIN/Classes/cMessenger.vb @@ -308,7 +308,7 @@ Public Class cMessenger Next Me.LOAD_MEMBERS() If dateTmp Is Nothing Then - Me.LOAD_MESSAGES(topMax) + Me.LOAD_MESSAGES_NEW(topMax) Else Me.LOAD_MESSAGES_DATE(dateTmp) End If @@ -346,7 +346,7 @@ Public Class cMessenger Me.LOAD_MEMBERS() If dateTmp Is Nothing Then - Me.LOAD_MESSAGES() + Me.LOAD_MESSAGES_NEW() Else Me.LOAD_MESSAGES_DATE(dateTmp) End If @@ -415,9 +415,9 @@ Public Class cMessenger cmd.Parameters.AddWithValue("@top", top) Dim dr = cmd.ExecuteReader() While dr.Read - Dim MSG As New cMessenger_ChatMessages(dr.Item("chatMg_id")) ' ----> 100 messages = 101 SQL calls + 'Dim MSG As New cMessenger_ChatMessages(dr.Item("chatMg_id")) ' ----> 100 messages = 101 SQL calls 'Hier werden die einzelnen MSg-Obj nicht mehr per SQL geladen, sondern direkt als Objekt übergeben -> schneller! - 'Dim MSG As New cMessenger_ChatMessages(dr.Item("chatMg_id"), dr.Item("chatMg_maId"), dr.Item("chatMg_datetime"), dr.Item("chatMg_maName"), dr.Item("chatMg_maFirma"), dr.Item("chatMg_type"), dr.Item("chatMg_text"), IIf(IsDBNull(dr.Item("chatMg_anhang_docId")), Nothing, dr.Item("chatMg_anhang_docId")), IIf(IsDBNull(dr.Item("chatMg_referenz_AvisoId")), Nothing, dr.Item("chatMg_referenz_AvisoId")), IIf(IsDBNull(dr.Item("chatMg_referenz_SendungsId")), Nothing, dr.Item("chatMg_referenz_SendungsId")), dr.Item("chatMg_referenz_KundenNr")) 'Me.chat_id, dr.Item("chatMb_maId")) 'yxc + Dim MSG As New cMessenger_ChatMessages(dr.Item("chatMg_id"), dr.Item("chatMg_chatId"), dr.Item("chatMg_maId"), dr.Item("chatMg_datetime"), dr.Item("chatMg_maName"), dr.Item("chatMg_maFirma"), dr.Item("chatMg_type"), dr.Item("chatMg_text"), IIf(IsDBNull(dr.Item("chatMg_anhang_docId")), Nothing, dr.Item("chatMg_anhang_docId")), IIf(IsDBNull(dr.Item("chatMg_referenz_AvisoId")), Nothing, dr.Item("chatMg_referenz_AvisoId")), IIf(IsDBNull(dr.Item("chatMg_referenz_SendungsId")), Nothing, dr.Item("chatMg_referenz_SendungsId")), dr.Item("chatMg_referenz_KundenNr")) 'Me.chat_id, dr.Item("chatMb_maId")) 'yxc Me.CHAT_MESSAGES.Add(MSG) End While dr.Close() @@ -431,6 +431,64 @@ Public Class cMessenger End Try End Sub + Public Sub LOAD_MESSAGES_NEW(Optional top As Integer = 100) + Try + Me.CHAT_MESSAGES.Clear() + + Using conn As SqlConnection = SQL.GetNewOpenConnectionADMIN() + Using cmd As New SqlCommand( + "SELECT TOP (@top) chatMg_id, chatMg_chatId, chatMg_maId, chatMg_maName, chatMg_maFirma, chatMg_datetime, chatMg_type, chatMg_text, chatMg_anhang_docId, chatMg_referenz_AvisoId, chatMg_referenz_SendungsId, chatMg_referenz_KundenNr + FROM tblMessenger_ChatMessages + WHERE chatMg_chatId = @chat_id + ORDER BY chatMg_datetime DESC", conn) + + cmd.Parameters.AddWithValue("@chat_id", chat_id) + cmd.Parameters.AddWithValue("@top", top) + + Using dr As SqlDataReader = cmd.ExecuteReader() + While dr.Read() + Dim chatMg_id As Integer? = SafeInt(dr("chatMg_id")) + Dim chatMg_chatId As Integer? = SafeInt(dr("chatMg_chatId")) + Dim chatMg_maId As Integer? = SafeInt(dr("chatMg_maId")) + Dim chatMg_type As String = If(IsDBNull(dr("chatMg_type")), "", dr("chatMg_type").ToString()) + Dim chatMg_anhang_docId As Integer? = SafeInt(dr("chatMg_anhang_docId")) + Dim chatMg_referenz_AvisoId As Integer? = SafeInt(dr("chatMg_referenz_AvisoId")) + Dim chatMg_referenz_SendungsId As Integer? = SafeInt(dr("chatMg_referenz_SendungsId")) + Dim chatMg_datetime As DateTime = If(IsDBNull(dr("chatMg_datetime")), DateTime.MinValue, Convert.ToDateTime(dr("chatMg_datetime"))) + Dim chatMg_maName As String = If(IsDBNull(dr("chatMg_maName")), "", dr("chatMg_maName").ToString()) + Dim chatMg_maFirma As String = If(IsDBNull(dr("chatMg_maFirma")), "", dr("chatMg_maFirma").ToString()) + Dim chatMg_text As String = If(IsDBNull(dr("chatMg_text")), "", dr("chatMg_text").ToString()) + Dim chatMg_referenz_KundenNr As String = If(IsDBNull(dr("chatMg_referenz_KundenNr")), "", dr("chatMg_referenz_KundenNr").ToString()) + + ' Message-Objekt direkt erstellen + Dim MSG As New cMessenger_ChatMessages(dr.Item("chatMg_id"), dr.Item("chatMg_chatId"), dr.Item("chatMg_maId"), dr.Item("chatMg_datetime"), dr.Item("chatMg_maName"), dr.Item("chatMg_maFirma"), dr.Item("chatMg_type"), dr.Item("chatMg_text"), IIf(IsDBNull(dr.Item("chatMg_anhang_docId")), Nothing, dr.Item("chatMg_anhang_docId")), IIf(IsDBNull(dr.Item("chatMg_referenz_AvisoId")), Nothing, dr.Item("chatMg_referenz_AvisoId")), IIf(IsDBNull(dr.Item("chatMg_referenz_SendungsId")), Nothing, dr.Item("chatMg_referenz_SendungsId")), dr.Item("chatMg_referenz_KundenNr")) + + Me.CHAT_MESSAGES.Add(MSG) + End While + End Using + End Using + End Using + + ' Nachrichten umdrehen, damit älteste zuerst angezeigt werden + Me.CHAT_MESSAGES.Reverse() + + Catch ex As Exception + MsgBox("Fehler in LOAD_MESSAGES: " & vbNewLine & ex.Message & vbNewLine & ex.StackTrace) + End Try + + End Sub + + Private Function SafeInt(value As Object) As Integer? + If IsDBNull(value) Then Return Nothing + Dim s As String = value.ToString().Trim() + Dim result As Integer + If Integer.TryParse(s, result) Then + Return result + Else + Return Nothing + End If + End Function + Public Sub LOAD_MESSAGES_DATE(dateTmp As Date) Try Me.CHAT_MESSAGES.Clear() @@ -442,9 +500,9 @@ Public Class cMessenger While dr.Read - Dim MSG As New cMessenger_ChatMessages(dr.Item("chatMg_id")) '----> 100 messages = 101 SQL calls + 'Dim MSG As New cMessenger_ChatMessages(dr.Item("chatMg_id")) '----> 100 messages = 101 SQL calls 'Hier werden die einzelnen MSg-Obj nicht mehr per SQL geladen, sondern direkt als Objekt übergeben -> schneller! - 'Dim MSG As New cMessenger_ChatMessages(dr.Item("chatMg_id"), dr.Item("chatMg_maId"), dr.Item("chatMg_datetime"), dr.Item("chatMg_maName"), dr.Item("chatMg_maFirma"), dr.Item("chatMg_type"), dr.Item("chatMg_text"), IIf(IsDBNull(dr.Item("chatMg_anhang_docId")), Nothing, dr.Item("chatMg_anhang_docId")), IIf(IsDBNull(dr.Item("chatMg_referenz_AvisoId")), Nothing, dr.Item("chatMg_referenz_AvisoId")), IIf(IsDBNull(dr.Item("chatMg_referenz_SendungsId")), Nothing, dr.Item("chatMg_referenz_SendungsId")), dr.Item("chatMg_referenz_KundenNr")) 'Me.chat_id, dr.Item("chatMb_maId")) 'yxc + Dim MSG As New cMessenger_ChatMessages(dr.Item("chatMg_id"), dr.Item("chatMg_chatId"), dr.Item("chatMg_maId"), dr.Item("chatMg_datetime"), dr.Item("chatMg_maName"), dr.Item("chatMg_maFirma"), dr.Item("chatMg_type"), dr.Item("chatMg_text"), IIf(IsDBNull(dr.Item("chatMg_anhang_docId")), Nothing, dr.Item("chatMg_anhang_docId")), IIf(IsDBNull(dr.Item("chatMg_referenz_AvisoId")), Nothing, dr.Item("chatMg_referenz_AvisoId")), IIf(IsDBNull(dr.Item("chatMg_referenz_SendungsId")), Nothing, dr.Item("chatMg_referenz_SendungsId")), dr.Item("chatMg_referenz_KundenNr")) 'Me.chat_id, dr.Item("chatMb_maId")) 'yxc Me.CHAT_MESSAGES.Add(MSG) End While @@ -780,7 +838,8 @@ Public Class cMessenger Me.chatMg_maId = chatMg_maId End Sub - Sub New(chatMg_chatId, chatMg_maId, chatMg_datetime, chatMg_maName, chatMg_maFirma, chatMg_type, chatMg_text, chatMg_anhang_docId, chatMg_referenz_AvisoId, chatMg_referenz_SendungsId, chatMg_referenz_KundenNr) + Sub New(chatMg_id, chatMg_chatId, chatMg_maId, chatMg_datetime, chatMg_maName, chatMg_maFirma, chatMg_type, chatMg_text, chatMg_anhang_docId, chatMg_referenz_AvisoId, chatMg_referenz_SendungsId, chatMg_referenz_KundenNr) + Me.chatMg_id = chatMg_id Me.chatMg_chatId = chatMg_chatId Me.chatMg_maId = chatMg_maId Me.chatMg_datetime = chatMg_datetime diff --git a/VERAG_PROG_ALLGEMEIN/Classes/cRMC.vb b/VERAG_PROG_ALLGEMEIN/Classes/cRMC.vb index 6720e866..709163ab 100644 --- a/VERAG_PROG_ALLGEMEIN/Classes/cRMC.vb +++ b/VERAG_PROG_ALLGEMEIN/Classes/cRMC.vb @@ -363,6 +363,31 @@ Public Class cRMC + End Function + + Public Shared Function checkPDFInvoices(Optional reDatVon As Date = Nothing, Optional reDatBis As Date = Nothing) As DataTable + Try + Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL + + Dim sqlTime As String = "" + + If IsDate(reDatVon) AndAlso CDate(reDatVon) > "01.01.2020" AndAlso IsDate(reDatBis) AndAlso CDate(reDatBis) > "01.01.2020" Then + sqlTime = " And cast([rmc_reDatum] As Date) between '" & reDatVon.ToShortDateString & "' and '" & reDatBis.ToShortDateString & "'" + End If + + Dim SQLstr = "Select rmc_reNr As RechnungsNr,rmc_reDatum As Rechnungsdatum, Adressen.AdressenNr As KundenNr,Adressen.[Name 1] As Kunde, kde_keineMWSt As keineMWST from [tblRMCImport] INNER JOIN Adressen On WölflKundenNr=[rmc_kdNr] Or weitereWölflKundenNr=[rmc_kdNr] INNER JOIN tblKundenErweitert On AdressenNr = kde_KundenNr where rmc_daId Is null " & sqlTime & " group by rmc_reNr, Adressen.AdressenNr, Adressen.[Name 1],rmc_reDatum, kde_keineMWSt" + + Dim dt = (New VERAG_PROG_ALLGEMEIN.SQL).loadDgvBySql(SQLstr, "FMZOLL") + + Return dt + + + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try + + Return Nothing + End Function Public Class Paramter diff --git a/VERAG_PROG_ALLGEMEIN/Classes/cUTA.vb b/VERAG_PROG_ALLGEMEIN/Classes/cUTA.vb index 108ce7f4..97b5ddb1 100644 --- a/VERAG_PROG_ALLGEMEIN/Classes/cUTA.vb +++ b/VERAG_PROG_ALLGEMEIN/Classes/cUTA.vb @@ -45,6 +45,31 @@ Public Class cUTA Return SQL.getValueTxtBySql("SELECT count(InvToCustomer) FROM [tblUTAImportNew] where InvToCustomer Is null ", "FMZOLL",,, -1) End Function + Public Shared Function checkPDFInvoices(Optional reDatVon As Date = Nothing, Optional reDatBis As Date = Nothing) As DataTable + Try + Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL + + Dim sqlTime As String = "" + + If IsDate(reDatVon) AndAlso CDate(reDatVon) > "01.01.2020" AndAlso IsDate(reDatBis) AndAlso CDate(reDatBis) > "01.01.2020" Then + sqlTime = " And CAST(U.Rechnungsdatum As Date) BETWEEN '" & reDatVon.ToShortDateString & "' and '" & reDatBis.ToShortDateString & "'" + End If + + Dim SQLstr = "Select U.Abrechnungsnummer As Abrechnungsnummer,U.Rechnungsnummer_pro_Lieferland,U.Lieferland,CAST(U.Rechnungsdatum As Date) As Rechnungsdatum,A.AdressenNr As KundenNr,A.UTAKundenNr As UTAKundenNr,A.[Name 1] As Kunde,A.LandKz, kde_keineMWSt As keineMWST FROM tblUTAImportNew U INNER JOIN Adressen A On A.UTAKundenNr = U.Kundennummer INNER JOIN tblKundenErweitert On A.AdressenNr = kde_KundenNr WHERE U.daId Is NULL " & sqlTime & " AND NOT (A.LandKz = 'RO' AND U.Lieferland = 'ROM') GROUP BY U.Abrechnungsnummer,U.Rechnungsnummer_pro_Lieferland,U.Lieferland,U.Rechnungsdatum,A.AdressenNr,A.UTAKundenNr ,A.[Name 1],A.LandKz, kde_keineMWSt ORDER BY U.Rechnungsdatum" + + Dim dt = (New VERAG_PROG_ALLGEMEIN.SQL).loadDgvBySql(SQLstr, "FMZOLL") + + Return dt + + + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try + + Return Nothing + + End Function + Public Class UTAHeader Property Übertragungsnummer As Integer diff --git a/VERAG_PROG_ALLGEMEIN/Messenger/frmMessenger.vb b/VERAG_PROG_ALLGEMEIN/Messenger/frmMessenger.vb index 9878e7b8..b7eb11dc 100644 --- a/VERAG_PROG_ALLGEMEIN/Messenger/frmMessenger.vb +++ b/VERAG_PROG_ALLGEMEIN/Messenger/frmMessenger.vb @@ -64,7 +64,7 @@ Public Class frmMessenger End Sub Private Sub MyDatagridview1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvChats.CellClick '.CellContentClick - If dgvChats.Rows(e.RowIndex).Cells("ungelesen").Value <> "" Then + If dgvChats.Rows(e.RowIndex).Cells("ungelesen").Value <> 0 Then 'If dgvChats.Rows(e.RowIndex).Cells("ungelesen").Value <> "" Then Dim dgv_ChatID = If(dgvChats.SelectedRows.Count > 0, dgvChats.SelectedRows(0).Cells("chat_id").Value, -1) intiDGVChats(dgv_ChatID, False) ' Splate ungelesen sol sich ändern End If @@ -216,7 +216,54 @@ Public Class frmMessenger " & where & " ) as T " & whereName & " ORDER BY chat_lastMsg DESC" - .DataSource = SQL.loadDgvBySql(sqlQery, "ADMIN") + + Dim sqlQery_optimiced As String = "SELECT TOP 200 + c.chat_id, + + CASE + WHEN ISNULL(c.chat_name, '') <> '' THEN c.chat_name + ELSE names.chat_name + END AS chat_name, + + ISNULL(unread.ungelesen, 0) AS ungelesen, + + c.chat_lastMsg + + FROM tblMessenger_Chat c + + -- ensure current user is member + INNER JOIN tblMessenger_ChatMembers m + ON m.chatMb_chatId = c.chat_id + AND m.chatMb_maId = " & VERAG_PROG_ALLGEMEIN.cAllgemein.USRID & " + + -- 🔹 get participant names (distinct!) + OUTER APPLY ( + SELECT STRING_AGG(name, ', ') AS chat_name + FROM ( + SELECT DISTINCT + mit.mit_vname + ' ' + mit.mit_nname AS name + FROM tblMessenger_ChatMembers m2 + INNER JOIN tblMitarbeiter mit + ON mit.mit_id = m2.chatMb_maId + WHERE m2.chatMb_chatId = c.chat_id + AND m2.chatMb_maId <> " & VERAG_PROG_ALLGEMEIN.cAllgemein.USRID & " + ) x + ) names + + -- 🔹 unread count separated (no duplication!) + OUTER APPLY ( + SELECT COUNT(*) AS ungelesen + FROM tblMessenger_ChatMessages msg + INNER JOIN tblMessenger_ChatMessageStatus s + ON s.chatMgSt_chatMsgId = msg.chatMg_id + WHERE msg.chatMg_chatId = c.chat_id + AND s.chatMgSt_MaId = " & VERAG_PROG_ALLGEMEIN.cAllgemein.USRID & " + AND s.chatMgSt_gelesen = 0 + ) unread WHERE c.chat_aktiv = " & IIf(Not cbxInaktiveChats.Checked, 1, 0) & "" & where & "ORDER BY c.chat_lastMsg DESC" + + + + .DataSource = SQL.loadDgvBySql(sqlQery_optimiced, "ADMIN") If .Columns.Count = 0 Then Exit Sub @@ -547,10 +594,19 @@ Public Class frmMessenger If CHAT IsNot Nothing Then - CHAT.LOAD_MESSAGES(topMessages) + CHAT.LOAD_MESSAGES_NEW(topMessages) ' CHAT = New VERAG_PROG_ALLGEMEIN.cMessenger.cMessenger_Chat(dgvChats.SelectedRows(0).Cells("chat_id").Value) Dim newMsg As Boolean = False + + Dim existingIds As New HashSet(Of Integer) + + For Each ctrl In MyFlowLayoutPanel1.Controls + existingIds.Add(ctrl.CHAT_MSG.chatMg_id) + Next + + + For Each MSG In CHAT.CHAT_MESSAGES Dim found As Boolean = False For Each I In MyFlowLayoutPanel1.Controls @@ -602,6 +658,61 @@ Public Class frmMessenger End Try End Sub + + Private Sub REFRESH_CHAT_NEW() + Try + If CHAT Is Nothing Then Exit Sub + + ' Load latest messages + CHAT.LOAD_MESSAGES_NEW(topMessages) + + ' Build fast lookup for existing message IDs + Dim existingIds As New HashSet(Of Integer) + + For Each ctrl As Control In MyFlowLayoutPanel1.Controls + Select Case ctrl.GetType() + Case GetType(usrCntlMessenger_ChatElement) + existingIds.Add(DirectCast(ctrl, usrCntlMessenger_ChatElement).CHAT_MSG.chatMg_id) + + Case GetType(usrCntlMessenger_ChatAnhang) + existingIds.Add(DirectCast(ctrl, usrCntlMessenger_ChatAnhang).CHAT_MSG.chatMg_id) + + Case GetType(usrCntlMessenger_ChatEmoji) + existingIds.Add(DirectCast(ctrl, usrCntlMessenger_ChatEmoji).CHAT_MSG.chatMg_id) + + Case GetType(usrCntlMessenger_ChatElementDEL) + existingIds.Add(DirectCast(ctrl, usrCntlMessenger_ChatElementDEL).CHAT_MSG.chatMg_id) + End Select + Next + + Dim newMessageAdded As Boolean = False + + MyFlowLayoutPanel1.SuspendLayout() + + For Each MSG In CHAT.CHAT_MESSAGES + If Not existingIds.Contains(MSG.chatMg_id) Then + Dim ctrl = getControlFromMSG(MSG) + If ctrl IsNot Nothing Then + MyFlowLayoutPanel1.Controls.Add(ctrl) + newMessageAdded = True + End If + End If + Next + + MyFlowLayoutPanel1.ResumeLayout() + + If newMessageAdded Then + MyFlowLayoutPanel1.VerticalScroll.Value = MyFlowLayoutPanel1.VerticalScroll.Maximum + End If + + checkOnlineOffline() + + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, + System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try + End Sub + 'Sub ORDER_CHAT_MSG() ' If Not CHECK_CHATMSG_ORDER() Then @@ -689,15 +800,16 @@ Public Class frmMessenger MSG.chatMg_maFirma = VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA If MSG.SAVE(True, CHAT.CHAT_MEMBERS) Then - SEND_TOKEN_NEW_MESSAGE() - ' CHAT.CHAT_MESSAGES.Add(MSG) - SET_ALL_READ() - REFRESH_CHAT() - rtbChatMessage.Text = "" - rtbChatMessage.Focus() - End If - End If + SEND_TOKEN_NEW_MESSAGE() + CHAT.CHAT_MESSAGES.Add(MSG) + SET_ALL_READ() + REFRESH_CHAT_NEW() + rtbChatMessage.Text = "" + rtbChatMessage.Focus() + End If + + End If End If End Sub @@ -753,13 +865,13 @@ Public Class frmMessenger If CHAT IsNot Nothing And VERAG_PROG_ALLGEMEIN.cMessenger.NEW_MESSGE = True Then VERAG_PROG_ALLGEMEIN.cMessenger.NEW_MESSGE = False ' MsgBox("asd") - REFRESH_CHAT() + REFRESH_CHAT_NEW() End If End Sub Private Sub Timer_REFRESH_Tick(sender As Object, e As EventArgs) Handles Timer_REFRESH.Tick loaded = False - REFRESH_CHAT() + REFRESH_CHAT_NEW() Dim dgv_ChatID = If(dgvChats.SelectedRows.Count > 0, dgvChats.SelectedRows(0).Cells("chat_id").Value, -1) If checkNewestShit() Then ' prüft, ob neue Nachrichten gekommen sind, sont kein Refresh (stört das scrollen) intiDGVChats(dgv_ChatID, False) @@ -871,7 +983,7 @@ Public Class frmMessenger If dgvChats.Columns.Count > 0 Then If e.ColumnIndex = dgvChats.Columns("ungelesen").Index Then - If dgvChats.Rows(e.RowIndex).Cells("ungelesen").Value <> "" Then + If dgvChats.Rows(e.RowIndex).Cells("ungelesen").Value <> 0 Then ' If dgvChats.Rows(e.RowIndex).Cells("ungelesen").Value <> "" Then dgvChats.Rows(e.RowIndex).Cells("ungelesen").Style.BackColor = Color.Red End If 'For Each r As DataGridViewRow In .Rows @@ -946,10 +1058,10 @@ Public Class frmMessenger If MSG.SAVE(True, CHAT.CHAT_MEMBERS) Then If reloadChat Then + CHAT.CHAT_MESSAGES.Add(MSG) SEND_TOKEN_NEW_MESSAGE() - ' CHAT.CHAT_MESSAGES.Add(MSG) SET_ALL_READ() - REFRESH_CHAT() + REFRESH_CHAT_NEW() rtbChatMessage.Text = "" rtbChatMessage.Focus() End If @@ -972,7 +1084,7 @@ Public Class frmMessenger SEND_TOKEN_NEW_MESSAGE() ' CHAT.CHAT_MESSAGES.Add(MSG) SET_ALL_READ() - REFRESH_CHAT() + REFRESH_CHAT_NEW() 'rtbChatMessage.Text = filePath 'rtbChatMessage.Focus() End If @@ -1155,7 +1267,7 @@ Public Class frmMessenger 'CHAT neu laden! SEND_TOKEN_NEW_MESSAGE() SET_ALL_READ() - REFRESH_CHAT() + REFRESH_CHAT_NEW() rtbChatMessage.Text = "" rtbChatMessage.Focus() End If diff --git a/VERAG_PROG_ALLGEMEIN/Schnittstellen/MSE/cMSEAPI.vb b/VERAG_PROG_ALLGEMEIN/Schnittstellen/MSE/cMSEAPI.vb index 3eeb3a00..d37223ee 100644 --- a/VERAG_PROG_ALLGEMEIN/Schnittstellen/MSE/cMSEAPI.vb +++ b/VERAG_PROG_ALLGEMEIN/Schnittstellen/MSE/cMSEAPI.vb @@ -71,6 +71,31 @@ Public Class cMSEAPI Return SQL.getValueTxtBySql("SELECT count(InvToCustomer) FROM [tblMSEInvoices] where InvToCustomer Is null ", "FMZOLL",,, -1) End Function + Public Shared Function checkPDFInvoices(Optional reDatVon As Date = Nothing, Optional reDatBis As Date = Nothing) As DataTable + Try + Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL + + Dim sqlTime As String = "" + + If IsDate(reDatVon) AndAlso CDate(reDatVon) > "01.01.2020" AndAlso IsDate(reDatBis) AndAlso CDate(reDatBis) > "01.01.2020" Then + sqlTime = " And cast(invoice_date As Date) between '" & reDatVon.ToShortDateString & "' and '" & reDatBis.ToShortDateString & "'" + End If + + Dim SQLstr = "Select invoice_id As RechnungsNr,[invoice_date] As Rechnungsdatum, Adressen.AdressenNr As KundenNr,Adressen.[Name 1] As Kunde, kde_keineMWSt As keineMWST from tblMSEInvoices inner join [tblMSECustomers] On [customer_number] = [customer_id] INNER JOIN Adressen On Adressen.MSEKundenNr = [customer_number] INNER JOIN tblKundenErweitert On AdressenNr = kde_KundenNr where daId Is null " & sqlTime & " group by invoice_id, Adressen.AdressenNr, Adressen.[Name 1], invoice_date, kde_keineMWSt" + + Dim dt = (New VERAG_PROG_ALLGEMEIN.SQL).loadDgvBySql(SQLstr, "FMZOLL") + + Return dt + + + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try + + Return Nothing + + End Function +