diff --git a/SDL/buchhaltung/usrCntlBH.vb b/SDL/buchhaltung/usrCntlBH.vb index a9c4f1fc..ca7b8649 100644 --- a/SDL/buchhaltung/usrCntlBH.vb +++ b/SDL/buchhaltung/usrCntlBH.vb @@ -2279,10 +2279,9 @@ Public Class usrCntlBH Blatt = Datei.Worksheets(1) - ' Header einlesen Dim headerMap As New Dictionary(Of String, Integer)(StringComparer.OrdinalIgnoreCase) - Dim startHeaderRow As Integer = If(TYP = "M", 7, 1) + Dim startHeaderRow As Integer = If(TYP = "M", 8, 1) For col As Integer = 1 To Blatt.UsedRange.Columns.Count @@ -2290,9 +2289,15 @@ Public Class usrCntlBH If String.IsNullOrWhiteSpace(rawHeader) Then Continue For - If rawHeader.Contains(";") Then + ' Trennzeichen erkennen: Semikolon oder Tab + Dim sep As Char = ";"c + If Not rawHeader.Contains(";") AndAlso rawHeader.Contains(ChrW(9)) Then + sep = ChrW(9) + End If + + If rawHeader.Contains(sep) Then ' Gesamte Kopfzeile steht in einer Zelle - Dim headers As String() = rawHeader.Split(";"c) + Dim headers As String() = rawHeader.Split(sep) For i As Integer = 0 To headers.Length - 1 Dim header As String = headers(i).Replace(ChrW(160), " "c).Trim().TrimEnd("."c).Trim() @@ -2320,14 +2325,11 @@ Public Class usrCntlBH requiredHeaders = {"Umsatz-ID", "Datum", "IBAN", "BIC", "Buchungstext", "Währung", "Betrag", "Kontoauszug"} End Select - For Each h As String In requiredHeaders - If Not headerMap.ContainsKey(h) Then - MsgBox("Pflichtspalte nicht gefunden: " & h) + MsgBox("Pflichtspalte nicht gefunden: " & h & vbNewLine & "Spaltenkopf muss sich an der " & startHeaderRow & " Zeile befinden!") Exit Sub End If - Next @@ -2335,24 +2337,84 @@ Public Class usrCntlBH visibleKdNrCheck = True End If - Dim letzteZeile As Integer = Blatt.UsedRange.Rows.Count - For row As Integer = startHeaderRow + 1 To letzteZeile + Dim dataRows As New List(Of Dictionary(Of String, String)) + + Dim lastRow As Integer = Blatt.UsedRange.Row + Blatt.UsedRange.Rows.Count - 1 + + For row As Integer = startHeaderRow + 1 To lastRow + + Dim rawLine As String = Convert.ToString(Blatt.Cells(row, 1).Value2) + + ' Fall b/c: ganze Zeile in einer Zelle (mit ; oder Tab getrennt) + If Not String.IsNullOrWhiteSpace(rawLine) AndAlso + (rawLine.Contains(";") OrElse rawLine.Contains(ChrW(9))) Then + + Dim sep As Char = If(rawLine.Contains(";"), ";"c, ChrW(9)) + Dim parts As String() = rawLine.Split(sep) + + Dim dict As New Dictionary(Of String, String)(StringComparer.OrdinalIgnoreCase) + + For Each kvp In headerMap + Dim idx As Integer = kvp.Value - 1 ' Header-Position ist 1-basiert + dict(kvp.Key) = If(idx < parts.Length, parts(idx).Replace(ChrW(160), " "c).Trim(), "") + Next + + dataRows.Add(dict) + + ' Fall a: Werte stehen in einzelnen Zellen + Else + ' Überspringen, falls Zeile komplett leer + Dim rowEmpty As Boolean = True + For Each kvp In headerMap + Dim v As String = Convert.ToString(Blatt.Cells(row, kvp.Value).Value2) + If Not String.IsNullOrWhiteSpace(v) Then + rowEmpty = False + Exit For + End If + Next + If rowEmpty Then Continue For + + Dim dict As New Dictionary(Of String, String)(StringComparer.OrdinalIgnoreCase) + + For Each kvp In headerMap + Dim v As String = Convert.ToString(Blatt.Cells(row, kvp.Value).Value2) + dict(kvp.Key) = If(v Is Nothing, "", v.Replace(ChrW(160), " "c).Trim()) + Next + + dataRows.Add(dict) + End If + Next + + + + + + + + + + + 'Dim letzteZeile As Integer = Blatt.UsedRange.Rows.Count + + 'For row As Integer = startHeaderRow + 1 To letzteZeile + + For Each d In dataRows If TYP = "Q" Then - 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 Umsatz_ID As String = Convert.ToString(d("Umsatz-ID")) + Dim Datum As String = Convert.ToString(d("Datum")) + Dim IBAN As String = Convert.ToString(d("IBAN")) + Dim BIC As String = Convert.ToString(d("BIC")) + Dim Buchungstext As String = Convert.ToString(d("Buchungstext")) + Dim Währung As String = Convert.ToString(d("Währung")) + Dim Kontoauszug As String = Convert.ToString(d("Kontoauszug")) + Dim Betrag As Double = Convert.ToDouble(d("Betrag")) Dim KundenNrCheck As String = "" If headerMap.ContainsKey("KDNR") Then - KundenNrCheck = Convert.ToString(Blatt.Cells(row, headerMap("KDNR")).Value) + KundenNrCheck = Convert.ToString(d("KDNR")) End If @@ -2415,13 +2477,13 @@ Public Class usrCntlBH 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 Umsatz_ID As String = Convert.ToString(d("Belegnr")) + Dim Datum As String = Convert.ToString(d("Belegdat")) + Dim Buchungstext As String = Convert.ToString(d("BuchText")) 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 SollBetrag As String = Convert.ToString(d("Soll EUR")) + Dim HabenBetrag As String = Convert.ToString(d("Haben EUR")) Dim Betrag As Double = 0 If SollBetrag <> "" AndAlso IsNumeric(SollBetrag) Then @@ -2433,7 +2495,7 @@ Public Class usrCntlBH Dim KundenNrCheck As String = "" If headerMap.ContainsKey("Gegenkto") Then - KundenNrCheck = Convert.ToString(Blatt.Cells(row, headerMap("Gegenkto")).Value) + KundenNrCheck = Convert.ToString(d("Gegenkto")) End If If String.IsNullOrWhiteSpace(Umsatz_ID) Then diff --git a/SDL/kunden/usrcntlFiskaluebersicht.Designer.vb b/SDL/kunden/usrcntlFiskaluebersicht.Designer.vb index a009c7e2..6504db57 100644 --- a/SDL/kunden/usrcntlFiskaluebersicht.Designer.vb +++ b/SDL/kunden/usrcntlFiskaluebersicht.Designer.vb @@ -96,6 +96,8 @@ Partial Class usrcntlFiskaluebersicht Me.txtUID = New VERAG_PROG_ALLGEMEIN.MyTextBox() Me.Label15 = New System.Windows.Forms.Label() Me.cbxArt = New VERAG_PROG_ALLGEMEIN.MyComboBox() + Me.ContextMenuStrip1 = New System.Windows.Forms.ContextMenuStrip(Me.components) + Me.KopierenToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() CType(Me.picLocked, System.ComponentModel.ISupportInitialize).BeginInit() Me.MyPanel1.SuspendLayout() CType(Me.dgvFiskaluebersicht, System.ComponentModel.ISupportInitialize).BeginInit() @@ -107,6 +109,7 @@ Partial Class usrcntlFiskaluebersicht CType(Me.picEORIOK, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.picOK, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.dgvUnterlagen, System.ComponentModel.ISupportInitialize).BeginInit() + Me.ContextMenuStrip1.SuspendLayout() Me.SuspendLayout() ' 'btnAdd @@ -1184,6 +1187,18 @@ Partial Class usrcntlFiskaluebersicht Me.cbxArt.Size = New System.Drawing.Size(70, 21) Me.cbxArt.TabIndex = 140 ' + 'ContextMenuStrip1 + ' + Me.ContextMenuStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.KopierenToolStripMenuItem}) + Me.ContextMenuStrip1.Name = "ContextMenuStrip1" + Me.ContextMenuStrip1.Size = New System.Drawing.Size(181, 48) + ' + 'KopierenToolStripMenuItem + ' + Me.KopierenToolStripMenuItem.Name = "KopierenToolStripMenuItem" + Me.KopierenToolStripMenuItem.Size = New System.Drawing.Size(180, 22) + Me.KopierenToolStripMenuItem.Text = "kopieren" + ' 'usrcntlFiskaluebersicht ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) @@ -1217,6 +1232,7 @@ Partial Class usrcntlFiskaluebersicht CType(Me.picEORIOK, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.picOK, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.dgvUnterlagen, System.ComponentModel.ISupportInitialize).EndInit() + Me.ContextMenuStrip1.ResumeLayout(False) Me.ResumeLayout(False) Me.PerformLayout() @@ -1296,4 +1312,6 @@ Partial Class usrcntlFiskaluebersicht Friend WithEvents lblUmsatz As Label Friend WithEvents Label15 As Label Friend WithEvents cbxArt As VERAG_PROG_ALLGEMEIN.MyComboBox + Friend WithEvents ContextMenuStrip1 As ContextMenuStrip + Friend WithEvents KopierenToolStripMenuItem As ToolStripMenuItem End Class diff --git a/SDL/kunden/usrcntlFiskaluebersicht.resx b/SDL/kunden/usrcntlFiskaluebersicht.resx index 2e79f648..a5591fe6 100644 --- a/SDL/kunden/usrcntlFiskaluebersicht.resx +++ b/SDL/kunden/usrcntlFiskaluebersicht.resx @@ -144,4 +144,10 @@ True + + True + + + 17, 17 + \ No newline at end of file diff --git a/SDL/kunden/usrcntlFiskaluebersicht.vb b/SDL/kunden/usrcntlFiskaluebersicht.vb index 7462f41d..6db14c2f 100644 --- a/SDL/kunden/usrcntlFiskaluebersicht.vb +++ b/SDL/kunden/usrcntlFiskaluebersicht.vb @@ -959,17 +959,10 @@ Public Class usrcntlFiskaluebersicht MsgBox("Fiskalübersicht ist bereits abgeschlossen und kann nicht gelöscht werden!") Exit Sub End If - If vbYes = MsgBox("Möchten Sie die Fiskalübersicht vom " & dgvFiskaluebersicht.SelectedRows(0).Cells("fk_datum").Value & " inkl. Anhänge wirklich löschen?", vbYesNo) Then + If vbYes = MsgBox("Möchten Sie die Fiskalübersicht vom " & dgvFiskaluebersicht.SelectedRows(0).Cells("fk_datum").Value & " inkl. Anhänge wirklich löschen?", vbYesNo) Then Dim anh_list = New cFiskalkundenAnhaenge() anh_list.DELETEALL(dgvFiskaluebersicht.SelectedRows(0).Cells("fk_Kdnr").Value, dgvFiskaluebersicht.SelectedRows(0).Cells("fk_Id").Value) fk.deleteEntry(fk.FK_Id) - 'If dgvFiskaluebersicht.Rows.Count > 1 Then - ' initDGVFiskaluebersicht() - 'ElseIf dgvFiskaluebersicht.Rows.Count = 1 Then - ' init(kdNr) - ' initDGVFiskaluebersicht() - 'End If - init(kdNr) initDGVFiskaluebersicht() End If @@ -1034,10 +1027,6 @@ Public Class usrcntlFiskaluebersicht ANH.fka_Name = "Website" ANH.SAVE() - 'If path Then - ' fk.FK_Homepage_PDF = DS.da_id - 'End If - fk.FK_Website_URL = txtHomepage.Text fk.SAVE() @@ -1259,5 +1248,89 @@ Public Class usrcntlFiskaluebersicht End Function + Private Sub dgvFiskaluebersicht_CellMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgvFiskaluebersicht.CellMouseClick + + If e.RowIndex < 0 Then Exit Sub 'Es wurde außerhalb einer gültigen Datenzeile geklickt + If e.ColumnIndex < 0 Then Exit Sub + + DirectCast(sender, DataGridView).Rows(e.RowIndex).Selected = True + If e.Button = MouseButtons.Right Then + + + If sender Is dgvFiskaluebersicht Then + + If dgvFiskaluebersicht.SelectedCells.Count = 0 Then Exit Sub 'Es wurde außerhalb einer gültigen Datenzeile geklickt + dgvFiskaluebersicht.CurrentCell = dgvFiskaluebersicht.Rows(e.RowIndex).Cells(e.ColumnIndex) + + If dgvFiskaluebersicht.CurrentRow.Cells("FK_Id").Value IsNot Nothing AndAlso IsNumeric(dgvFiskaluebersicht.CurrentRow.Cells("FK_Id").Value) AndAlso CInt(dgvFiskaluebersicht.CurrentRow.Cells("FK_Id").Value) > 0 Then + + ContextMenuStrip1.Show(Cursor.Position) + + End If + + + + End If + + + + End If + + End Sub + + Private Sub KopierenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles KopierenToolStripMenuItem.Click + + + Dim FISK_SOURCE As New cFiskalkunden(dgvFiskaluebersicht.CurrentRow.Cells("FK_Id").Value) + + Dim f As New frmDatumsabfrage("Datum der neuen Due Diligence:", True) + + + f.ShowDialog() + If f.DialogResult = DialogResult.OK Then + Dim fisDate As Date = CDate(f.Datum) + + fk = New VERAG_PROG_ALLGEMEIN.cFiskalkunden() + fk.FK_Datum = fisDate + fk.FK_Kdnr = FISK_SOURCE.FK_Kdnr + fk.FK_Art = FISK_SOURCE.FK_Art + fk.FK_Land = FISK_SOURCE.FK_Land + + If FISK_SOURCE.FK_WebsiteSt_URL IsNot Nothing AndAlso FISK_SOURCE.FK_WebsiteSt_URL <> "" Then + fk.FK_WebsiteSt_URL = FISK_SOURCE.FK_WebsiteSt_URL + End If + + If FISK_SOURCE.FK_Steuerberater IsNot Nothing AndAlso FISK_SOURCE.FK_Steuerberater <> "" Then + fk.FK_Steuerberater = FISK_SOURCE.FK_Steuerberater + End If + + If FISK_SOURCE.FK_Website_URL IsNot Nothing AndAlso FISK_SOURCE.FK_Website_URL <> "" Then + fk.FK_Website_URL = FISK_SOURCE.FK_Website_URL + End If + + Dim ID = fk.SAVE_ID() + + Dim anh_list = New cFiskalkundenAnhaenge().LOAD_LIST_ByKdNr(FISK_SOURCE.FK_Kdnr, FISK_SOURCE.FK_Id) + + For Each ANH_SOURCE In anh_list + + Dim ANH = New VERAG_PROG_ALLGEMEIN.cFiskalkundenAnhaenge() + ANH.fka_fkId = ID + ANH.fka_Datum = ANH_SOURCE.fka_Datum + ANH.fka_Art = ANH_SOURCE.fka_Art + ANH.fka_docId = ANH_SOURCE.fka_docId + ANH.fka_KdNr = ANH_SOURCE.fka_KdNr + ANH.fka_Name = ANH_SOURCE.fka_Name + ANH.SAVE() + + Next + + + dgvFiskaluebersicht.GetOrder() + initDGVFiskaluebersicht() + dgvFiskaluebersicht.SetOrder() + End If + + End Sub End Class diff --git a/SDL/seriendruck/usrCntlFakturierung.vb b/SDL/seriendruck/usrCntlFakturierung.vb index 50ca353b..0fbdb4d2 100644 --- a/SDL/seriendruck/usrCntlFakturierung.vb +++ b/SDL/seriendruck/usrCntlFakturierung.vb @@ -2585,6 +2585,7 @@ Public Class usrcntlFakturierung "

Created on: " & Now.ToShortDateString & " at " & Now.ToShortTimeString & "


Automatically generated email. Please do not reply to this email." + betreff = "VERAG360 Invoice-Report " & von.Month & "/" & von.Year betreff = betreff.Replace(vbNewLine, "").Replace(vbCr, "").Replace(vbLf, "").Replace(vbCrLf, "").Replace(System.Environment.NewLine, " ") @@ -2597,7 +2598,7 @@ Public Class usrcntlFakturierung API.api_EMailAttCnt = pfadList.Count - If VERAG_PROG_ALLGEMEIN.cProgramFunctions.sendMail(EMails, betreff, Body,, False, False, EMails_CC, EMails_BCC, pfadList) Then + If VERAG_PROG_ALLGEMEIN.cProgramFunctions.sendMail(EMails, betreff, Body, VERAG_PROG_ALLGEMEIN.cEmailBenachrichtigung.getAbsenderEmail(), False, False, EMails_CC, EMails_BCC, pfadList) Then API.UPDTAE_OK() brnSR_abgeschlossen.Enabled = False diff --git a/VERAG_PROG_ALLGEMEIN/Classes/cFiskalkunden.vb b/VERAG_PROG_ALLGEMEIN/Classes/cFiskalkunden.vb index 8994c84b..42214cf7 100644 --- a/VERAG_PROG_ALLGEMEIN/Classes/cFiskalkunden.vb +++ b/VERAG_PROG_ALLGEMEIN/Classes/cFiskalkunden.vb @@ -1,5 +1,6 @@ Imports System.Data.SqlClient Imports System.Reflection +Imports com.sun.security.auth Public Class cFiskalkunden @@ -93,6 +94,21 @@ Public Class cFiskalkunden Return SQL.doSQLVarList(sqlstr, "FMZOLL", , list) End Function + Public Function SAVE_ID() As Integer + Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList() + + Dim sqlstr = " BEGIN TRAN IF EXISTS(SELECT * FROM [tblFiskalkunden] WHERE FK_Id=@FK_Id) " & + " BEGIN " & getUpdateCmd() & " END " & + " Else " & + " BEGIN " & getInsertCmd() & " END " & + " commit tran " + + + Dim id = SQL.doSQLVarListID(FK_Id, sqlstr, "FMZOLL", , list) + Return id + + End Function + Public Sub LOAD() Try hasEntry = False diff --git a/VERAG_PROG_ALLGEMEIN/Classes/cFiskalkundenAnhaenge.vb b/VERAG_PROG_ALLGEMEIN/Classes/cFiskalkundenAnhaenge.vb index 85ba9ec8..3fa7cdfc 100644 --- a/VERAG_PROG_ALLGEMEIN/Classes/cFiskalkundenAnhaenge.vb +++ b/VERAG_PROG_ALLGEMEIN/Classes/cFiskalkundenAnhaenge.vb @@ -64,6 +64,22 @@ Public Class cFiskalkundenAnhaenge End Function + Shared Function LOAD_LIST_ByKdNr(fka_KdNr As Integer, fka_fkId As Integer) As List(Of cFiskalkundenAnhaenge) + Dim ANH_LIST = New List(Of cFiskalkundenAnhaenge) + ANH_LIST.Clear() + Dim SQL As New SQL + Dim dgv = SQL.loadDgvBySql("SELECT fka_id FROM [tblFiskalkundenAnhaenge] WHERE fka_KdNr=" & fka_KdNr & " And fka_fkId = " & fka_fkId & " ORDER BY fka_Datum desc", "AVISO") + If dgv IsNot Nothing Then + For Each r In dgv.Rows + + ANH_LIST.Add(New VERAG_PROG_ALLGEMEIN.cFiskalkundenAnhaenge(r("fka_id"))) + Next + End If + + Return ANH_LIST + + End Function + Public Function SAVE(Optional errHinweis = "") As Boolean Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList()