diff --git a/SDL/buchhaltung/usrCntlBH.vb b/SDL/buchhaltung/usrCntlBH.vb index 1ef2ad38..a9c4f1fc 100644 --- a/SDL/buchhaltung/usrCntlBH.vb +++ b/SDL/buchhaltung/usrCntlBH.vb @@ -2,6 +2,7 @@ Imports System.Globalization Imports System.Text Imports System.Web.UI.WebControls.Expressions +Imports QRCoder.PayloadGenerator.SwissQrCode Imports VERAG_PROG_ALLGEMEIN Public Class usrCntlBH @@ -2220,6 +2221,7 @@ Public Class usrCntlBH End If Dim importiert As Boolean = False + Dim TYP = cbxBankspesentyp._value Dim fd As New OpenFileDialog fd.InitialDirectory = "\\share01.verag.ost.dmn\F\19 VERAG 360 - MDM\Buchhaltung MDM\Bank\Subkonten" @@ -2267,7 +2269,7 @@ Public Class usrCntlBH exclApp.CutCopyMode = False 'Try to open exclusively - Datei = exclApp.Workbooks.Open(Filename:=fd.FileName, ReadOnly:=False, IgnoreReadOnlyRecommended:=True, Notify:=False) + Datei = exclApp.Workbooks.Open(Filename:=fd.FileName, ReadOnly:=False, IgnoreReadOnlyRecommended:=True, Notify:=False, Format:=6, Delimiter:=";") If Datei.ReadOnly Then MessageBox.Show("Die Datei wird bereits von einem anderen Benutzer oder einer anderen Excel-Instanz verwendet, bitte Datei vor dem Import schließen!") @@ -2280,27 +2282,44 @@ Public Class usrCntlBH ' Header einlesen Dim headerMap As New Dictionary(Of String, Integer)(StringComparer.OrdinalIgnoreCase) + Dim startHeaderRow As Integer = If(TYP = "M", 7, 1) + For col As Integer = 1 To Blatt.UsedRange.Columns.Count - Dim header As String = Convert.ToString(Blatt.Cells(1, col).Value).Trim() + Dim rawHeader As String = Convert.ToString(Blatt.Cells(startHeaderRow, col).Value2) - If header <> "" AndAlso Not headerMap.ContainsKey(header) Then - headerMap.Add(header, col) + If String.IsNullOrWhiteSpace(rawHeader) Then Continue For + + If rawHeader.Contains(";") Then + ' Gesamte Kopfzeile steht in einer Zelle + Dim headers As String() = rawHeader.Split(";"c) + + For i As Integer = 0 To headers.Length - 1 + Dim header As String = headers(i).Replace(ChrW(160), " "c).Trim().TrimEnd("."c).Trim() + + If header <> "" AndAlso Not headerMap.ContainsKey(header) Then + headerMap.Add(header, i + 1) + End If + Next + Else + Dim header As String = rawHeader.Replace(ChrW(160), " "c).Trim().TrimEnd("."c).Trim() + + If header <> "" AndAlso Not headerMap.ContainsKey(header) Then + headerMap.Add(header, col) + End If End If - Next ' Pflichtspalten prüfen - Dim requiredHeaders As String() = { - "Umsatz-ID", - "Datum", - "IBAN", - "BIC", - "Buchungstext", - "Währung", - "Betrag", - "Kontoauszug" - } + Dim requiredHeaders As String() + + Select Case TYP + Case "M" + requiredHeaders = {"Belegdat", "Belegnr", "BuchText", "Soll EUR", "Haben EUR", "Gegenkto"} + Case "Q" + requiredHeaders = {"Umsatz-ID", "Datum", "IBAN", "BIC", "Buchungstext", "Währung", "Betrag", "Kontoauszug"} + End Select + For Each h As String In requiredHeaders @@ -2316,86 +2335,64 @@ Public Class usrCntlBH visibleKdNrCheck = True End If - Dim letzteZeile As Integer = Blatt.UsedRange.Rows.Count + For row As Integer = startHeaderRow + 1 To letzteZeile + If TYP = "Q" Then - For row As Integer = 2 To letzteZeile + Dim Umsatz_ID As String = Convert.ToString(Blatt.Cells(row, headerMap("Umsatz-ID")).Value) + Dim Datum As String = Convert.ToString(Blatt.Cells(row, headerMap("Datum")).Value) + Dim IBAN As String = Convert.ToString(Blatt.Cells(row, headerMap("IBAN")).Value) + Dim BIC As String = Convert.ToString(Blatt.Cells(row, headerMap("BIC")).Value) + Dim Buchungstext As String = Convert.ToString(Blatt.Cells(row, headerMap("Buchungstext")).Value) + Dim Währung As String = Convert.ToString(Blatt.Cells(row, headerMap("Währung")).Value) + Dim Kontoauszug As String = Convert.ToString(Blatt.Cells(row, headerMap("Kontoauszug")).Value) + Dim Betrag As Double = Convert.ToDouble(Blatt.Cells(row, headerMap("Betrag")).Value) + Dim KundenNrCheck As String = "" - Dim Umsatz_ID As String = - Convert.ToString(Blatt.Cells(row, headerMap("Umsatz-ID")).Value) - - - Dim Datum As String = - Convert.ToString(Blatt.Cells(row, headerMap("Datum")).Value) - - Dim IBAN As String = - Convert.ToString(Blatt.Cells(row, headerMap("IBAN")).Value) - - Dim BIC As String = - Convert.ToString(Blatt.Cells(row, headerMap("BIC")).Value) - - Dim Buchungstext As String = - Convert.ToString(Blatt.Cells(row, headerMap("Buchungstext")).Value) - - Dim Währung As String = - Convert.ToString(Blatt.Cells(row, headerMap("Währung")).Value) - - Dim Kontoauszug As String = - Convert.ToString(Blatt.Cells(row, headerMap("Kontoauszug")).Value) - - Dim Betrag As Double = - Convert.ToDouble(Blatt.Cells(row, headerMap("Betrag")).Value) - - Dim KundenNrCheck As String = "" - - If headerMap.ContainsKey("KDNR") Then - KundenNrCheck = Convert.ToString(Blatt.Cells(row, headerMap("KDNR")).Value) - End If - - - - - - - If String.IsNullOrWhiteSpace(Umsatz_ID) Then - Continue For - End If - - If IsNumeric(Umsatz_ID) AndAlso IsNumeric(Betrag) AndAlso Not String.IsNullOrWhiteSpace(Kontoauszug) Then - - - Dim R As DataRow = dt.NewRow - R("Umsatz-ID") = Umsatz_ID - R("Datum") = Datum - R("IBAN") = IBAN - R("BIC") = BIC - R("Buchungstext") = Buchungstext - R("Währung") = Währung - R("Betrag") = Betrag - R("Kontoauszug") = Kontoauszug - - Dim BuchungstextOnlyNr As String = System.Text.RegularExpressions.Regex.Replace(Buchungstext, "[^0-9]", "") - Dim KundeNr = CInt(sql.DLookup("bnk_KundenNr", "tblBankverbindungen", "bnk_iban like '%" & BuchungstextOnlyNr & "%' and isnull(bnk_archiv,0) = 0", "FMZOLL", "-1")) - - R("KdNr") = KundeNr - - If visibleKdNrCheck Then - - R("KdNrCheck") = KundenNrCheck - - If KundenNrCheck <> "" AndAlso IsNumeric(KundenNrCheck) Then - If CInt(KundenNrCheck) = KundeNr Then - R("KdNrValid") = True - Else - R("KdNrValid") = False - End If - End If + If headerMap.ContainsKey("KDNR") Then + KundenNrCheck = Convert.ToString(Blatt.Cells(row, headerMap("KDNR")).Value) End If - If KundeNr = -1 Then + If String.IsNullOrWhiteSpace(Umsatz_ID) Then + Continue For + End If + + If IsNumeric(Umsatz_ID) AndAlso IsNumeric(Betrag) AndAlso Not String.IsNullOrWhiteSpace(Kontoauszug) Then + + + Dim R As DataRow = dt.NewRow + R("Umsatz-ID") = Umsatz_ID + R("Datum") = Datum + R("IBAN") = IBAN + R("BIC") = BIC + R("Buchungstext") = Buchungstext + R("Währung") = Währung + R("Betrag") = Betrag + R("Kontoauszug") = Kontoauszug + + Dim BuchungstextOnlyNr As String = System.Text.RegularExpressions.Regex.Replace(Buchungstext, "[^0-9]", "") + Dim KundeNr = CInt(sql.DLookup("bnk_KundenNr", "tblBankverbindungen", "bnk_iban like '%" & BuchungstextOnlyNr & "%' and isnull(bnk_archiv,0) = 0", "FMZOLL", "-1")) + + R("KdNr") = KundeNr + + If visibleKdNrCheck Then + + R("KdNrCheck") = KundenNrCheck + + If KundenNrCheck <> "" AndAlso IsNumeric(KundenNrCheck) Then + If CInt(KundenNrCheck) = KundeNr Then + R("KdNrValid") = True + Else + R("KdNrValid") = False + End If + End If + End If + + + If KundeNr = -1 Then missingKdNr += 1 End If @@ -2413,16 +2410,89 @@ Public Class usrCntlBH Continue For - End If + End If + Else + + + Dim Umsatz_ID As String = Convert.ToString(Blatt.Cells(row, headerMap("Belegnr")).Value) + Dim Datum As String = Convert.ToString(Blatt.Cells(row, headerMap("Belegdat")).Value) + Dim Buchungstext As String = Convert.ToString(Blatt.Cells(row, headerMap("BuchText")).Value) + Dim Währung As String = "EUR" + + Dim SollBetrag As String = Convert.ToString(Blatt.Cells(row, headerMap("Soll EUR")).Value) + Dim HabenBetrag As String = Convert.ToString(Blatt.Cells(row, headerMap("Haben EUR")).Value) + + Dim Betrag As Double = 0 + If SollBetrag <> "" AndAlso IsNumeric(SollBetrag) Then + Betrag = CDbl(SollBetrag) + ElseIf HabenBetrag <> "" AndAlso IsNumeric(HabenBetrag) Then + Betrag = CDbl(HabenBetrag) + End If + + Dim KundenNrCheck As String = "" + + If headerMap.ContainsKey("Gegenkto") Then + KundenNrCheck = Convert.ToString(Blatt.Cells(row, headerMap("Gegenkto")).Value) + End If + + If String.IsNullOrWhiteSpace(Umsatz_ID) Then + Continue For + End If + + If IsNumeric(Betrag) AndAlso Not String.IsNullOrWhiteSpace(Buchungstext) AndAlso Not String.IsNullOrWhiteSpace(Datum) AndAlso IsDate(Datum) Then + + + Dim R As DataRow = dt.NewRow + R("Umsatz-ID") = Umsatz_ID + R("Datum") = Datum + R("Buchungstext") = Buchungstext + R("Währung") = Währung + R("Betrag") = Betrag + + R("KdNr") = 0 + + If visibleKdNrCheck Then + + R("KdNrCheck") = KundenNrCheck + + If KundenNrCheck <> "" AndAlso IsNumeric(KundenNrCheck) Then + If CInt(KundenNrCheck) = R("KdNr") Then + R("KdNrValid") = True + Else + R("KdNrValid") = False + End If + End If + End If + + + If R("KdNr") = -1 Then + missingKdNr += 1 + End If + + 'Betrag laut folgendem Schema berechnen: + + If Betrag < 0 Then Betrag = Betrag * -1 + Betrag = Betrag + 1 + Dim aufgerundet As Double = Math.Ceiling(Betrag / 5) * 5 + + R("Gebühr") = aufgerundet + + dt.Rows.Add(R) + + Else + + Continue For + + End If + + + End If Next If dt.Rows.Count > 0 Then - - - Using frm As New frmAbrechnungHandling(dt, Nothing, "Import " & dt.Rows.Count & " Buchungsdaten " & cbxBankspesentyp.SelectedItem.Text & IIf(missingKdNr > 0, missingKdNr & " Kundenkonten konnten nicht gefunden werden!", "")) With frm @@ -2454,8 +2524,8 @@ Public Class usrCntlBH For Each r As DataGridViewRow In frm.dgvHandling.SelectedRows Dim Datum = r.Cells("Datum").Value - Dim TYP = cbxBankspesentyp._value - Dim KdNr = 0 + + Dim KdNr = 0 If frm.cbxDivers.Checked AndAlso visibleKdNrCheck Then If r.Cells("KdNrCheck").Value <> "" AndAlso IsNumeric(r.Cells("KdNrCheck").Value) Then KdNr = CInt(r.Cells("KdNrCheck").Value) diff --git a/SDL/frmdynMailvorlage.vb b/SDL/frmdynMailvorlage.vb index bb3df839..88731736 100644 --- a/SDL/frmdynMailvorlage.vb +++ b/SDL/frmdynMailvorlage.vb @@ -1,5 +1,4 @@ -Imports DAKOSY_Worker.DEERRE -Imports Microsoft.Office.Interop +Imports Microsoft.Office.Interop Imports VERAG_PROG_ALLGEMEIN Public Class frmdynMailvorlagen diff --git a/SDL/mdm/frmMDMDatenverarbetiung.vb b/SDL/mdm/frmMDMDatenverarbetiung.vb index 08a20ee8..13b2e3c3 100644 --- a/SDL/mdm/frmMDMDatenverarbetiung.vb +++ b/SDL/mdm/frmMDMDatenverarbetiung.vb @@ -2380,7 +2380,8 @@ Public Class frmMDMDatenverarbetiung Function genPLOSEInsertMautD_NEW(von As Date, bis As Date) As Boolean Try - VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM = False + + VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM = True pic.Visible = False diff --git a/SDL/seriendruck/usrCntlFakturierung.Designer.vb b/SDL/seriendruck/usrCntlFakturierung.Designer.vb index aca5842d..c3682e66 100644 --- a/SDL/seriendruck/usrCntlFakturierung.Designer.vb +++ b/SDL/seriendruck/usrCntlFakturierung.Designer.vb @@ -46,6 +46,7 @@ Partial Class usrcntlFakturierung Me.Button18 = New System.Windows.Forms.Button() Me.Label44 = New System.Windows.Forms.Label() Me.GBSammelrechnung = New System.Windows.Forms.GroupBox() + Me.btnSR_zuruecksetzen = New System.Windows.Forms.Button() Me.PictureBox13 = New System.Windows.Forms.PictureBox() Me.Label15 = New System.Windows.Forms.Label() Me.PictureBox12 = New System.Windows.Forms.PictureBox() @@ -109,7 +110,7 @@ Partial Class usrcntlFakturierung Me.btnWikiStatusmails = New System.Windows.Forms.Button() Me.gb_MDM_Rechnungen = New System.Windows.Forms.GroupBox() Me.Label14 = New System.Windows.Forms.Label() - Me.btnSR_zuruecksetzen = New System.Windows.Forms.Button() + Me.cbxFixeTaxe = New System.Windows.Forms.CheckBox() Me.gb_fakturierung.SuspendLayout() Me.GBMautberichte.SuspendLayout() CType(Me.dgvMautbericht, System.ComponentModel.ISupportInitialize).BeginInit() @@ -356,6 +357,7 @@ Partial Class usrcntlFakturierung ' 'GBSammelrechnung ' + Me.GBSammelrechnung.Controls.Add(Me.cbxFixeTaxe) Me.GBSammelrechnung.Controls.Add(Me.btnSR_zuruecksetzen) Me.GBSammelrechnung.Controls.Add(Me.PictureBox13) Me.GBSammelrechnung.Controls.Add(Me.Label15) @@ -423,6 +425,18 @@ Partial Class usrcntlFakturierung Me.GBSammelrechnung.TabIndex = 14 Me.GBSammelrechnung.TabStop = False ' + 'btnSR_zuruecksetzen + ' + Me.btnSR_zuruecksetzen.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.btnSR_zuruecksetzen.ForeColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(54, Byte), Integer), CType(CType(128, Byte), Integer)) + Me.btnSR_zuruecksetzen.Location = New System.Drawing.Point(744, 261) + Me.btnSR_zuruecksetzen.Name = "btnSR_zuruecksetzen" + Me.btnSR_zuruecksetzen.Size = New System.Drawing.Size(107, 32) + Me.btnSR_zuruecksetzen.TabIndex = 135 + Me.btnSR_zuruecksetzen.Text = "SR-zurücksetzen" + Me.btnSR_zuruecksetzen.UseVisualStyleBackColor = True + Me.btnSR_zuruecksetzen.Visible = False + ' 'PictureBox13 ' Me.PictureBox13.BackgroundImage = CType(resources.GetObject("PictureBox13.BackgroundImage"), System.Drawing.Image) @@ -518,7 +532,7 @@ Partial Class usrcntlFakturierung ' Me.Label11.Location = New System.Drawing.Point(168, 156) Me.Label11.Name = "Label11" - Me.Label11.Size = New System.Drawing.Size(440, 17) + Me.Label11.Size = New System.Drawing.Size(262, 17) Me.Label11.TabIndex = 125 Me.Label11.Text = "6. Fixe Taxe 441 (bei Belegsumme < 500) berechnen" ' @@ -1063,17 +1077,16 @@ Partial Class usrcntlFakturierung Me.Label14.TabIndex = 73 Me.Label14.Text = "Rechnungsdaten" ' - 'btnSR_zuruecksetzen + 'cbxFixeTaxe ' - Me.btnSR_zuruecksetzen.FlatStyle = System.Windows.Forms.FlatStyle.Flat - Me.btnSR_zuruecksetzen.ForeColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(54, Byte), Integer), CType(CType(128, Byte), Integer)) - Me.btnSR_zuruecksetzen.Location = New System.Drawing.Point(744, 261) - Me.btnSR_zuruecksetzen.Name = "btnSR_zuruecksetzen" - Me.btnSR_zuruecksetzen.Size = New System.Drawing.Size(107, 32) - Me.btnSR_zuruecksetzen.TabIndex = 135 - Me.btnSR_zuruecksetzen.Text = "SR-zurücksetzen" - Me.btnSR_zuruecksetzen.UseVisualStyleBackColor = True - Me.btnSR_zuruecksetzen.Visible = False + Me.cbxFixeTaxe.AutoSize = True + Me.cbxFixeTaxe.Checked = True + Me.cbxFixeTaxe.CheckState = System.Windows.Forms.CheckState.Checked + Me.cbxFixeTaxe.Location = New System.Drawing.Point(428, 156) + Me.cbxFixeTaxe.Name = "cbxFixeTaxe" + Me.cbxFixeTaxe.Size = New System.Drawing.Size(15, 14) + Me.cbxFixeTaxe.TabIndex = 136 + Me.cbxFixeTaxe.UseVisualStyleBackColor = True ' 'usrcntlFakturierung ' @@ -1201,4 +1214,5 @@ Partial Class usrcntlFakturierung Friend WithEvents PictureBox13 As PictureBox Friend WithEvents Label15 As Label Friend WithEvents btnSR_zuruecksetzen As Button + Friend WithEvents cbxFixeTaxe As CheckBox End Class diff --git a/SDL/seriendruck/usrCntlFakturierung.vb b/SDL/seriendruck/usrCntlFakturierung.vb index 710984f1..a8d24c03 100644 --- a/SDL/seriendruck/usrCntlFakturierung.vb +++ b/SDL/seriendruck/usrCntlFakturierung.vb @@ -1,6 +1,7 @@ Imports System.Globalization Imports System.IO Imports System.Web.UI.WebControls.Expressions +Imports java.util Imports VERAG_PROG_ALLGEMEIN Public Class usrcntlFakturierung @@ -290,7 +291,7 @@ Public Class usrcntlFakturierung GROUP BY [Firma_ID], [Status], [Sammelrechnung], [Sachbearbeiter], [RechnungsKundenNr], [Währungscode], [Steuersatz %], [Lastschrift]", "FMZOLL") - If Not vbYes = MsgBox("Möchten Sie mit der Erstellung der " & dtREGU.Rows.Count & " Sammelrechnungen vorfahren?", vbYesNoCancel) Then + If Not vbYes = MsgBox("Möchten Sie mit der Erstellung der " & dtREGU.Rows.Count & " Sammelrechnungen vorfahren?" & vbNewLine & IIf(cbxFixeTaxe.Checked, "Fixe Taxe wird verrechnet!", "Fixe Taxe wird NICHT verrechnet!"), vbYesNoCancel) Then MsgBox("Rechnungslauf wird abgebrochen!") : Exit Sub End If @@ -366,7 +367,7 @@ Public Class usrcntlFakturierung showPic(Bankspesen(Sachbearbeiter, rechnungsdatum), PictureBox5) 'Berechnet FixeTaxe. - showPic(FixeTaxe(Sachbearbeiter, rechnungsdatum), PictureBox6) + If cbxFixeTaxe.Checked Then showPic(FixeTaxe(Sachbearbeiter, rechnungsdatum), PictureBox6) 'Gesamtmautberichte an Sammelrechnung anhängen @@ -622,10 +623,6 @@ Public Class usrcntlFakturierung Dim intZlr As Integer = 0 - If r("RechnungsKundenNr") = "401715" Or r("RechnungsKundenNr") = "401943" Or r("RechnungsKundenNr") = "402179" Or r("RechnungsKundenNr") = "402598" Or r("RechnungsKundenNr") = "402656" Or r("RechnungsKundenNr") = "402688" Or r("RechnungsKundenNr") = "402719" Or r("RechnungsKundenNr") = "402888" Or r("RechnungsKundenNr") = "402933" Or r("RechnungsKundenNr") = "401733" Or r("RechnungsKundenNr") = "402245" Or r("RechnungsKundenNr") = "402712" Or r("RechnungsKundenNr") = "402065" Or r("RechnungsKundenNr") = "402712" Or r("RechnungsKundenNr") = "401908" Or r("RechnungsKundenNr") = "401829" Or r("RechnungsKundenNr") = "203083" Then - 'MsgBox("Test") - End If - ' Bei BetragExclusivFT kleiner als 500€ wird 1x fixe Taxe verrechnet, bei grösser/gleich 500€ wird kein fixe Taxe verrechnet. ' Zähler auf die Anzahl der fixe Taxe Löschungen einstellen. @@ -1126,7 +1123,7 @@ Public Class usrcntlFakturierung Dim hatFehler As Boolean = False If dtSammelRechnugen.Rows.Count = 0 Then - MsgBox("Keine Rechnungen für die Anlage der ZNB-Berichte gefunden!" & vbNewLine & "Vorgang wird abgebrochen.") + MsgBox("Keine Rechnungen für die Anlage der ZNB-Berichte gefunden!" & vbNewLine & "Vorgang für die ZNB-liste wird übersprungen.") Return False End If @@ -1141,7 +1138,7 @@ Public Class usrcntlFakturierung End If If dtSammelRechnugen_EZB.Rows.Count = 0 Then - MsgBox("Keine Rechnungen der Filiale 8001 für die Anlage der ZNB-Berichte gefunden!" & vbNewLine & "Vorgang wird abgebrochen.") + MsgBox("Keine Rechnungen der Filiale 8001 für die Anlage der ZNB-Berichte gefunden!" & vbNewLine & "Vorgang für die ZNB-liste wird übersprungen.") Return False End If @@ -2615,30 +2612,63 @@ Public Class usrcntlFakturierung If vbYes = MsgBox("Soll die Sammelrechnung für den " & rechnungsdatum & " zurückgesetzt werden?" & vbNewLine & "ACHTUNG, das darf nur von Administratoren durchgeführt werden!!!!", vbYesNoCancel) Then Dim SQL As New SQL + Dim setBack As Boolean = False + Dim LIEFERANT As String = "" + '1. VZ zurücksetzen - wenn vorhanden! - SQL.doSQL("UPDATE [VERAG].[dbo].[tblMDM_Zinsberechnung] Set RK_ID = NULL,verrechnet = NULL where RK_ID in (select RK_ID from Rechnungsausgang where cast(RechnungsDatum as date) = '" & rechnungsdatum.ToShortDateString & "' and Firma_ID = 19 and Sammelrechnung = 6 )", "FMZOLL") + LIEFERANT = "VZ-Daten" + setBack = SQL.doSQL("UPDATE [VERAG].[dbo].[tblMDM_Zinsberechnung] Set RK_ID = NULL,verrechnet = NULL where RK_ID in (select RK_ID from Rechnungsausgang where cast(RechnungsDatum as date) = '" & rechnungsdatum.ToShortDateString & "' and Firma_ID = 19 and Sammelrechnung = 6 )", "FMZOLL") + + If Not createInfo(setBack, LIEFERANT) Then Exit Sub '2. SR löschen - SQL.doSQL("delete from Rechnungsausgang where cast(RechnungsDatum as date) = '" & rechnungsdatum.ToShortDateString & "' and Firma_ID = 19 and Sammelrechnung = 6 ", "FMZOLL") + LIEFERANT = "SR-Rechnung" + setBack = SQL.doSQL("delete from Rechnungsausgang where cast(RechnungsDatum as date) = '" & rechnungsdatum.ToShortDateString & "' and Firma_ID = 19 and Sammelrechnung = 6 ", "FMZOLL") + If Not createInfo(setBack, LIEFERANT) Then Exit Sub '3. Lieferantendaten zurücksetzten 'PLOSE - SQL.doSQL("update tblPLOSE_Details set plose_Fakturiert = 0, plose_FakturiertDatum=NULL where isnull(plose_Fakturiert,0) = 1 and cast(plose_FakturiertDatum as Date) >= '" & rechnungsdatum.AddDays(1) & "'", "FMZOLL") + LIEFERANT = "PLOSE-Daten" + setBack = SQL.doSQL("update tblPLOSE_Details set plose_Fakturiert = 0, plose_FakturiertDatum=NULL where isnull(plose_Fakturiert,0) = 1 and cast(plose_FakturiertDatum as Date) >= '" & rechnungsdatum.AddDays(1) & "'", "FMZOLL") + + If Not createInfo(setBack, LIEFERANT) Then Exit Sub 'UTA - SQL.doSQL("UPDATE [tblUTAImportNew] set charged=0,chargedDatetime=NULL where isnull(charged,0) = 1 and chargedDatetime >= '" & rechnungsdatum.AddDays(1) & "'", "FMZOLL") + LIEFERANT = "UTA-Daten" + setBack = SQL.doSQL("UPDATE [tblUTAImportNew] set charged=0,chargedDatetime=NULL where isnull(charged,0) = 1 and chargedDatetime >= '" & rechnungsdatum.AddDays(1) & "'", "FMZOLL") - 'IDS - SQL.doSQL("UPDATE [tblIDSTransactionsNew] Set charged = 0 ,chargedDatetime = NULL where isnull(charged,0) = 1 and chargedDatetime >= '" & rechnungsdatum.AddDays(1) & "'", "FMZOLL") + If Not createInfo(setBack, LIEFERANT) Then Exit Sub + + LIEFERANT = "IDS-Daten" + setBack = SQL.doSQL("UPDATE [tblIDSTransactionsNew] Set charged = 0 ,chargedDatetime = NULL where isnull(charged,0) = 1 and chargedDatetime >= '" & rechnungsdatum.AddDays(1) & "'", "FMZOLL") + + If Not createInfo(setBack, LIEFERANT) Then Exit Sub 'MSE - SQL.doSQL("UPDATE [tblMSETransactions] Set charged = 0 , chargedDatetime = NULL where isnull(charged,0) = 1 and chargedDatetime >= '" & rechnungsdatum.AddDays(1) & "'", "FMZOLL") + setBack = SQL.doSQL("UPDATE [tblMSETransactions] Set charged = 0 , chargedDatetime = NULL where isnull(charged,0) = 1 and chargedDatetime >= '" & rechnungsdatum.AddDays(1) & "'", "FMZOLL") + LIEFERANT = "MSE-Daten" + + If Not createInfo(setBack, LIEFERANT) Then Exit Sub 'BANK - Wenn vorhanden - SQL.doSQL("UPDATE [VERAG].[dbo].[tblMDM_Bankspesen] Set RK_ID = NULL,verrechnet = NULL, SR_datum = NULL where verrechnet >= '" & rechnungsdatum.AddDays(1) & "' and SR_datum = '" & rechnungsdatum.ToShortDateString & "'", "FMZOLL") + LIEFERANT = "BANK-Daten" + setBack = SQL.doSQL("UPDATE [VERAG].[dbo].[tblMDM_Bankspesen] Set RK_ID = NULL,verrechnet = NULL, SR_datum = NULL where verrechnet >= '" & rechnungsdatum.AddDays(1) & "' and SR_datum = '" & rechnungsdatum.ToShortDateString & "'", "FMZOLL") + If Not createInfo(setBack, LIEFERANT) Then Exit Sub + + + 'MAUTDATEN + LIEFERANT = "Mautbericht-Daten" + setBack = SQL.doSQL("delete from tblMautbericht where Billingdate= '" & rechnungsdatum.ToShortDateString & "'", "FMZOLL") + + If Not createInfo(setBack, LIEFERANT) Then Exit Sub + + + If setBack Then + MsgBox("Rücksetzung erfolgreich!") + End If @@ -2649,4 +2679,16 @@ Public Class usrcntlFakturierung End Sub + + Private Function createInfo(setBack As Boolean, Lieferant As String) As Boolean + + Dim INFO As String = "Achtung die Rücksetzung der " & Lieferant & " ist fehlgeschlagen, Rücksetzung wird abgebrochen!" + + If Not setBack Then + MsgBox(INFO) + End If + + Return setBack + + End Function End Class diff --git a/VERAG_PROG_ALLGEMEIN/Classes/cKundenSicherheiten.vb b/VERAG_PROG_ALLGEMEIN/Classes/cKundenSicherheiten.vb index 0aab2fbb..6760ac04 100644 --- a/VERAG_PROG_ALLGEMEIN/Classes/cKundenSicherheiten.vb +++ b/VERAG_PROG_ALLGEMEIN/Classes/cKundenSicherheiten.vb @@ -24,6 +24,9 @@ Public Class cKundenSicherheiten Public Property sc_stornoDatum As Date? = Nothing Public Property sc_stornoMaId As Integer? = Nothing + Public Property sc_cbam_jahr As Integer? = Nothing + Public Property sc_cbam_quartal As Integer? = Nothing + Public hasEntry As Boolean = False @@ -34,6 +37,13 @@ Public Class cKundenSicherheiten LOAD() End Sub + Sub New(sc_kundenNr As String, sc_cbam_quartal As Integer, sc_cbam_jahr As Integer) + sc_kundenNr = sc_kundenNr + sc_cbam_quartal = sc_cbam_quartal + sc_cbam_jahr = sc_cbam_jahr + LOADCBAM() + End Sub + Public Function getParameterList() As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) Dim list As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) @@ -57,6 +67,8 @@ Public Class cKundenSicherheiten list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("sc_storno", sc_storno)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("sc_stornoDatum", sc_stornoDatum)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("sc_stornoMaId", sc_stornoMaId)) + list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("sc_cbam_jahr", sc_cbam_jahr)) + list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("sc_cbam_quartal", sc_cbam_quartal)) Return list End Function @@ -103,6 +115,33 @@ Public Class cKundenSicherheiten VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, MethodInfo.GetCurrentMethod.Name) End Try End Sub + Public Sub LOADCBAM() + Try + hasEntry = False + Using conn As SqlConnection = SQL.GetNewOpenConnectionFMZOLL() + Using cmd As New SqlCommand("SELECT * FROM tblKundenSicherheiten WHERE sc_kundenNr=@sc_kundenNr and sc_cbam_quartal = @sc_cbam_quartal and sc_cbam_jahr = @sc_cbamsc_cbam_jahr_year", conn) + cmd.Parameters.AddWithValue("@sc_kundenNr", sc_kundenNr) + cmd.Parameters.AddWithValue("@sc_cbam_quartal", sc_cbam_quartal) + cmd.Parameters.AddWithValue("@sc_cbam_jahr", sc_cbam_jahr) + Dim dr = cmd.ExecuteReader() + If dr.Read Then + For Each li In getParameterList() + Dim prop As PropertyInfo = Me.GetType.GetProperty(li.Scalarvariable) + If dr(li.Text) Is DBNull.Value Then + prop.SetValue(Me, Nothing) + Else + prop.SetValue(Me, dr(li.Text)) + End If + Next + hasEntry = True + End If + dr.Close() + End Using + End Using + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, MethodInfo.GetCurrentMethod.Name) + End Try + End Sub Public Function getUpdateCmd() As String Dim list = getParameterList() diff --git a/VERAG_PROG_ALLGEMEIN/VERAG_Zollanmeldung/cVERAG_CustomsDeclarations.vb b/VERAG_PROG_ALLGEMEIN/VERAG_Zollanmeldung/cVERAG_CustomsDeclarations.vb index a4036fd2..31b1d3ba 100644 --- a/VERAG_PROG_ALLGEMEIN/VERAG_Zollanmeldung/cVERAG_CustomsDeclarations.vb +++ b/VERAG_PROG_ALLGEMEIN/VERAG_Zollanmeldung/cVERAG_CustomsDeclarations.vb @@ -1,8 +1,10 @@ Imports System.Data.SqlClient Imports System.Reflection Imports System.Runtime.InteropServices.ComTypes +Imports System.Windows.Forms Imports com.sun.tools.javac.util Imports java.lang.ProcessBuilder +Imports Org.BouncyCastle.Crypto.Agreement Imports sun.util.resources.cldr.aa Imports VERAG_PROG_ALLGEMEIN.TESTJSON @@ -518,6 +520,9 @@ Public Class cVERAG_CustomsDeclarations End Function Public Sub checkfreshCBAMWarning() + + 'TODO: die CBAM-Kosten pro Quartal berechnen und als "Bankgarantie" in die tblKundenSicherheiten schreiben/aktualisieren (wird aktuell noch händisch gemacht, Fehleranfällig und + Try Dim CBAM_ITEMS As New List(Of cVERAG_CustomsDeclarations_Item) @@ -597,6 +602,10 @@ Public Class cVERAG_CustomsDeclarations Dim dateCBAM = If(If(za_ReleaseDate, za_DeclarationDate), Now) Dim eigenmasseSumme_YEAR As Decimal = getCBAM_KG(vertretenerEORI, CDate("01.01." & dateCBAM.Year), CDate("31.12." & dateCBAM.Year), za_MRN) / 1000 + Dim quarter As Integer = Math.Ceiling(dateCBAM.Month / 3.0) + Dim Country As String = If(CBAM_ITEMS.FirstOrDefault()?.zaItem_OriginCountry, "") + createOrUpdateKundenSicherheitseintrag(KD_IND, Country, vertretenerEORI, quarter, dateCBAM.Year) + 'Prüft, ob Vertrag vorliegt: Dim hasValidVertrag_CBAM As Boolean = @@ -679,6 +688,10 @@ Public Class cVERAG_CustomsDeclarations Dim dateCBAM = If(If(za_ReleaseDate, za_DeclarationDate), Now) + Dim Country As String = If(CBAM_ITEMS.FirstOrDefault()?.zaItem_OriginCountry, "") + Dim quarter As Integer = Math.Ceiling(dateCBAM.Month / 3.0) + createOrUpdateKundenSicherheitseintrag(KD, Country, importerEORI, quarter, dateCBAM.Year) + Dim eigenmasseSumme_Shipment As Decimal = CBAM_ITEMS.Sum(Function(i) If(i.zaItem_NetMass, 0D)) / 1000 Dim eigenmasseSumme_YEAR As Decimal = getCBAM_KG(importerEORI, CDate("01.01." & dateCBAM.Year), CDate("31.12." & dateCBAM.Year)) / 1000 @@ -807,6 +820,95 @@ Public Class cVERAG_CustomsDeclarations Return String.Join(", ", result) End Function + Private Function createOrUpdateKundenSicherheitseintrag(KUNDE As cKunde, ImportCountry As String, EORI As String, cbamQquarter As Integer, cbamYear As Integer) + + Dim von As Date + Dim bis As Date + Dim CBAMZertifikatKosten As Double = 0 + + If ImportCountry = "" Then Return False + + Select Case cbamQquarter + Case "1" + von = New Date(cbamYear, 1, 1) + bis = New Date(cbamYear, 3, 31) + CBAMZertifikatKosten = 75.36 + + Case "2" + von = New Date(cbamYear, 4, 1) + bis = New Date(cbamYear, 6, 30) + CBAMZertifikatKosten = 75.28 + Case "3" + von = New Date(cbamYear, 7, 1) + bis = New Date(cbamYear, 9, 30) + CBAMZertifikatKosten = 82.32 + + Case "4" + von = New Date(cbamYear, 10, 1) + bis = New Date(cbamYear, 12, 31) + CBAMZertifikatKosten = 0 + End Select + + Dim EORI_ = {EORI} + + Dim LIST As List(Of VERAG_PROG_ALLGEMEIN.cVERAG_CustomsDeclarations) = VERAG_PROG_ALLGEMEIN.cVERAG_CustomsDeclarations.LOAD_List_CBAM(EORI_, ImportCountry, von, bis,, True) + + + Dim grouped = From za In LIST + Where za.Items IsNot Nothing + From it In za.Items + Let tarif = If(it.zaItem_HSCode IsNot Nothing AndAlso it.zaItem_HSCode.Length >= 8, + it.zaItem_HSCode.Substring(0, 8), + it.zaItem_HSCode) + Let country = it.zaItem_OriginCountry + Group By tarif, country + Into grp = Group + Select New With { + .Tarif = tarif, + .Country = country, + .Eigenmasse = grp.Sum(Function(x) If(x.it.zaItem_NetMass, 0D)), + .Rohmasse = grp.Sum(Function(x) If(x.it.zaItem_GrossMass, 0D)), + .RechnungswertEUR = grp.Sum(Function(x) If(x.it.zaItem_InvoiceValueEUR, 0D)) + } + + + + + + + + Dim gesamtBetrag As Double = 0 + Dim cost As Double = 0 + Dim emission As Double = 0 + Dim benchmark As Double = 0 + + + For Each r In grouped + cATEZ_Greenpulse_CBAM_CostCalculation.calcCBAM_ByCertificatePrice(r.Tarif, r.Rohmasse, r.Country, CBAMZertifikatKosten, cbamYear, cost, emission, benchmark) + gesamtBetrag += cost + Next + + + + Dim Kunde_Sicherheit As New cKundenSicherheiten(KUNDE.KundenNr, cbamQquarter, cbamYear) + If Kunde_Sicherheit.hasEntry Then + + Kunde_Sicherheit.sc_Betrag = gesamtBetrag + KUNDE.SAVE() + Else + Kunde_Sicherheit.sc_Bemerkung = "EUR" + Kunde_Sicherheit.sc_Bemerkung = "CBAM Kosten Q" & cbamQquarter & " " & cbamYear + Kunde_Sicherheit.sc_Art = "BANKGARANTIE" + Kunde_Sicherheit.sc_Betrag = gesamtBetrag + Kunde_Sicherheit.sc_datum = Today() + Kunde_Sicherheit.sc_Mitarbeiter = "AUTO" + KUNDE.SAVE() + End If + + + + End Function + Public Function getCBAM_KG(EORI As String, von As Date, bis As Date, Optional without_MRN As String = "", Optional isDeclarant As Boolean = False) As Decimal Try If EORI = "" Then Return 0