Imports IntraSell_DLL
Imports IntraSell_Net_Base
Imports MySql.Data.MySqlClient

Public Class AbstractVorgangForm
    Inherits AbstractForm
    Implements InterfacePrintable

    Public Event VorgangGeladen()
    Public Event ArtikelAenderung(ArtNr As Integer, Preis As Decimal, Total As Decimal, vorgang As dsVorgaenge.buchvorgangRow)
    Public Event VorgangInfo(content As String)
    Public Event SetButtonsEvent(neu As Boolean)

    Friend BARRECHNUNG_KEINE_EINGABE_BAR_GEGEBEN As Boolean = False
    Friend PREIS_GENAUIGKEIT As Integer = 4 ' Wichting 4 Nachkommastellen, sonst ist Berechung von MWST beim Vorgang auf Grund Rundungsfehler nicht korrekt

    Private _kundNr As Integer = 0
    'auf Nothing setzen wenn kunde / wegen lieferland geändert word 
    Dim VorgangInBearbeitungFuerPreisberechnung As VorgangInBearbeitung = Nothing

    Public Sub Form_Verlassen() Handles MyBase.Verlassen
        Me.Close()
    End Sub

    Public Function GetVorgang() As dsVorgaenge.buchvorgangRow
        Dim vorgang As dsVorgaenge.buchvorgangRow = Nothing
        Try
            If BuchvorgangBindingSource.Current IsNot Nothing Then vorgang = BuchvorgangBindingSource.Current.row()
            'MitarbeiterNR setzen 
            If vorgang IsNot Nothing AndAlso vorgang.IsMitarbeiterNrNull Then
                vorgang.MitarbeiterNr = MitarbeiterID

            End If
        Catch ex As Exception
            HandleAppError(ex, Silent:=True)
        End Try

        Return vorgang
    End Function

    ''' <summary>
    ''' Aktuelle Position im Grid liefern
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Function GetVorgangPosition() As dsVorgaenge._buchvorgang_artikelRow
        Try
            If Buchvorgang_artikelBindingSource.Current Is Nothing Then Return Nothing
            Return Buchvorgang_artikelBindingSource.Current.row()
        Catch ex As Exception
            HandleAppError(ex, "GetVorgangPosition", Silent:=True)
        End Try
        Return Nothing
    End Function

    Friend Function IsEditable() As Boolean
        Dim vorgang = GetVorgang()
        If vorgang.Abgeschlossen OrElse vorgang.Bezahlt Then
            Return False
        Else
            Return True
        End If
    End Function


    ''' <summary>
    ''' 
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property KundNr As Integer
        Get
            Return _kundNr
        End Get
        Set(value As Integer)
            _kundNr = value
            'Me.AddNewButton.Enabled = KundNr > 0
            VorgangInBearbeitungFuerPreisberechnung = Nothing
        End Set
    End Property

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property SummeNetto As Decimal
        Get
            If GetVorgang() Is Nothing Then
                Return Nothing
            Else
                Return GetVorgang().Summe
            End If
        End Get
        Set(value As Decimal)
            If GetVorgang() IsNot Nothing Then
                GetVorgang().Summe = value
            End If
        End Set
    End Property

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property MWST As Decimal
        Get
            If GetVorgang() Is Nothing Then
                Return Nothing
            Else
                Return GetVorgang().SummeMWST
            End If
        End Get
        Set(value As Decimal)
            GetVorgang().SummeMWST = value
        End Set
    End Property

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property SummeBrutto As Decimal
        Get
            If GetVorgang() Is Nothing Then
                Return Nothing
            Else
                Return GetVorgang().SummeBrutto
            End If
        End Get
        Set(value As Decimal)
            GetVorgang().SummeBrutto = value
        End Set
    End Property

    ''' <summary>
    ''' Berechne alle Preise neu nach. z.bsp nach Sammelrechnung. 
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub BerechneVorgang()
        Dim vorgang = GetVorgang()
        For Each pos In vorgang._Getbuchvorgang_artikelRows
            NachArtNrAktualisierungBerechnePreisUndBezeichnung(pos)
            'RecalculatePosition(pos)
        Next
        BerechneVorgangSummen(GetVorgang())
    End Sub


    Function GetVorgangInBearbeitung(v As dsVorgaenge.buchvorgangRow) As VorgangInBearbeitung
        If VorgangInBearbeitungFuerPreisberechnung IsNot Nothing Then
            If VorgangInBearbeitungFuerPreisberechnung.Nummer <> v.Nummer OrElse VorgangInBearbeitungFuerPreisberechnung.Typ <> v.Typ Then
                VorgangInBearbeitungFuerPreisberechnung = Nothing
            End If
        End If

        If VorgangInBearbeitungFuerPreisberechnung Is Nothing Then
            Dim vorgangInBearbeitung = New VorgangInBearbeitung(v)
            vorgangInBearbeitung.Preisliste = GetVorgangPreisliste(vorgangInBearbeitung)
            vorgangInBearbeitung.LieferLandISO2 = GetLieferLandISO2(v.Typ, v.Nummer)
            If vorgangInBearbeitung.LieferLandISO2 Is Nothing Then
                vorgangInBearbeitung.LieferLandISO2 = GetLieferLandISO2NachKunden(v.KundNr)
            End If
            VorgangInBearbeitungFuerPreisberechnung = vorgangInBearbeitung
        End If
        Return VorgangInBearbeitungFuerPreisberechnung
    End Function

    ''' <summary>
    ''' Preise neu berechnen nach Update in _buchvorgang_artikelRow.
    ''' Die Funktion berechnet die Preise neu wenn r.Preis_Netto null oder 0 ist.
    ''' </summary>
    ''' <remarks></remarks>
    Protected Sub NachArtNrAktualisierungBerechnePreisUndBezeichnung(ByRef r As dsVorgaenge._buchvorgang_artikelRow)
        Try

            Dim v As dsVorgaenge.buchvorgangRow = GetVorgang()
            Try
                If IsNull(r.ArtNr) Then
                    Return
                End If
            Catch ex As Exception
                Return
            End Try
            Dim KundNr = v.KundNr
            Dim VKPreis As Decimal = 0
            Dim artikel = ArtikelDataRow(r.ArtNr)
            If artikel Is Nothing Then
                Return
            Else
                If IsDBNull(artikel("PreisATS")) Then
                    Throw New Exception(String.Format("Bitte einen Preis für Artikel {0} in der Artikelverwaltung festlegen.", r.ArtNr))
                End If
                VKPreis = artikel("PreisATS")
                Try
                    If IsNull(r.Bezeichnung) OrElse r.Bezeichnung = "" Then
                        r.Bezeichnung = artikel("Bezeichnung")
                    End If
                Catch ex As Exception
                    r.Bezeichnung = artikel("Bezeichnung")
                End Try
                r.MWSTSatz = artikel("MWST")
            End If

            Try
                If IsNull(r.Stk) Then
                    Return
                End If
            Catch ex As Exception
                Return
            End Try

            Dim vInBearb = GetVorgangInBearbeitung(v)
            Dim preis As Preis
            If KundNr <= 1 AndAlso vInBearb.Preisliste = "" AndAlso IstPreisNichtDefiniert(r.Preis_Netto) Then 'Standart Artikel Preis 
                preis = New Preis
                preis.NettoPreis = artikel("PreisATS")
                preis.BruttoPreis = artikel("PreisATS_Brutto")
                preis.EKPreis = 0
                If Not IsNull(artikel("EKPreis")) Then preis.EKPreis = artikel("EKPreis")
                preis.MwstSatz = artikel("MWST")
            Else 'Teuer in der Berechnung
                Dim specialPreis As Double = intrasell.preise.GetPreis(IdNr:=KundNr, ArtNr:=r.ArtNr, Stk:=r.Stk, Preisliste:=vInBearb.Preisliste, LieferLandISO2:=vInBearb.LieferLandISO2)
                If specialPreis > 0 Then
                    VKPreis = specialPreis
                End If
                If IstPreisNichtDefiniert(r.Preis_Netto) Then
                    preis = intrasell.preise.CalculateBruttoPreisMitMwSt(VKPreis, r.ArtNr, KundNr, vInBearb.LieferLandISO2)
                Else
                    preis = intrasell.preise.CalculateBruttoPreisMitMwSt(r.Preis_Netto, r.ArtNr, KundNr, vInBearb.LieferLandISO2)
                End If
            End If

            r.Preis_Netto = preis.NettoPreis
            r.Preis_Brutto = preis.BruttoPreis
            r.MWST = preis.Mwst
            r.MWSTSatz = preis.MwstSatz
            r.EKPreis = preis.EKPreis

            Buchvorgang_artikelBindingSource.EndEdit()
        Catch ex As Exception
            HandleAppError(ex)
        End Try

    End Sub

    Function IstPreisNichtDefiniert(preisAttribut)
        Try
            If IsDBNull(preisAttribut) Then
                Return True
            ElseIf preisAttribut = 0 Then
                Return True
            End If
        Catch ex As Exception
            Return True
        End Try

        Return False
    End Function

    Protected Sub SetVorgangEigenschaft(Name As String, Value As String)
        intrasell.vorgang.SetVorgangEigenschaft(GetVorgang().Typ, GetVorgang().Nummer, Name, Value)
    End Sub

    Protected Function GetVorgangEigenschaft(Name As String)
        'Nach Eingabe in den Eigenschaften speichern
        Return intrasell.vorgang.GetVorgangEigenschaft(GetVorgang().Typ, GetVorgang().Nummer, Name)
    End Function

    ''' <summary>
    ''' Touch Events 
    ''' </summary>
    ''' <param name="grund"></param>
    ''' <remarks></remarks>
    Friend Sub VorgangAusschuss(grund As String)
        Try
            VorgangAusschussBuchung(GetVorgang().Typ, GetVorgang().Nummer, grund)
            Close()
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    Sub LadeVorgangErneut()
        LadeVorgangNummer(GetVorgang().Typ, GetVorgang().Nummer, False)
    End Sub

    ''' <summary>
    ''' Daten für einen Vorgang aus der Datenbank laden 
    ''' </summary>
    ''' <param name="Typ"></param>
    ''' <param name="Nummer"></param>
    ''' <param name="raiseEventVorgangGeladen"></param>
    ''' <remarks></remarks>
    Public Sub LadeVorgangNummer(Typ As String, Nummer As Integer, Optional raiseEventVorgangGeladen As Boolean = True)
        Try
            WriteDebug("AbstractVorgangForm: LadeVorgangNummer " & Typ & "-" & Nummer)
            Loading = True
            DsVorgaenge.EnforceConstraints = False
            DsVorgaenge.buchvorgaengeeigenschaften.Clear()
            DsVorgaenge._buchvorgang_artikel.Clear()
            DsVorgaenge.buchvorgang.Clear()
            BuchvorgangTableAdapter.FillByNummer(DsVorgaenge.buchvorgang, Typ, Nummer)
            Buchvorgang_artikelTableAdapter.FillByNummer(DsVorgaenge._buchvorgang_artikel, Typ, Nummer)
            BuchvorgaengeeigenschaftenTableAdapter.FillBy(DsVorgaenge.buchvorgaengeeigenschaften, Typ, Nummer)
            Dim Vorgang = GetVorgang()
            If Vorgang IsNot Nothing AndAlso Vorgang.Typ = VorgangTypen.AR Then
                Vorgang.GegebenBar = intrasell.vorgang.GetVorgangEigenschaft(Typ, Nummer, BARGELD_GEGEBEN)
            End If

            If raiseEventVorgangGeladen Then
                RaiseEvent VorgangGeladen()
            End If

            DsVorgaenge.AcceptChanges()
            DsVorgaenge.EnforceConstraints = True
            SetFormName()
        Catch ex As Exception
            HandleAppError(ex)
        Finally
            Loading = False
        End Try
    End Sub

    Public Sub LadeVorgaengeKunde(KundNr As Integer, Optional VorgangTyp As String = "")
        Try
            WriteLog("LadeVorgaengKunde für IDNR " & KundNr)

            DsVorgaenge.buchvorgaengeeigenschaften.Clear()
            DsVorgaenge._buchvorgang_artikel.Clear()
            DsVorgaenge.buchvorgang.Clear()
            BuchvorgangTableAdapter.FillByKundNr(DsVorgaenge.buchvorgang, KundNr)
            Buchvorgang_artikelTableAdapter.FillByKundNr(DsVorgaenge._buchvorgang_artikel, KundNr)
            BuchvorgaengeeigenschaftenTableAdapter.FillByKundNr(DsVorgaenge.buchvorgaengeeigenschaften, KundNr)

            BuchvorgangBindingSource.Sort = "Datum DESC"

            If VorgangTyp <> "" Then
                BuchvorgangBindingSource.Filter = "Typ='" & VorgangTyp & "'"
            End If
            'Me.DsVorgaenge.buchvorgang.OrderBy(r -> r.Field("Date"))

            DsVorgaenge.AcceptChanges()
            SetFormName()
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub


    ''' <summary>
    ''' Buchvorgang_artikelBindingSource wird auf die gewünschte Position gesetzt
    ''' </summary>
    ''' <param name="neuePosition"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Function PositionMarkieren(neuePosition As ArtikelPosition) As Boolean
        Dim hatSpezifikation = Not String.IsNullOrEmpty(neuePosition.Spezifikation)
        If hatSpezifikation Then
            Return False
        End If
        Dim selbeArtikel As Boolean = False

        Try
            Dim positionen_gruppieren As Boolean = True

            Try
                positionen_gruppieren = CType(VarValue_Default(BARRECHNUNG_POSITIONEN_GRUPPIEREN, "true"), Boolean)
                If Not positionen_gruppieren Then
                    Return False
                End If
            Catch ex As Exception
                'Ignore
            End Try

            'selbe artikel auswählen 
            Dim found = Nothing
            For Each x As DataRowView In Buchvorgang_artikelBindingSource
                Dim cur As dsVorgaenge._buchvorgang_artikelRow = CType(x.Row, dsVorgaenge._buchvorgang_artikelRow)
                Dim curArtNr = -1
                Try
                    If Not IsDBNull(cur.ArtNr) Then
                        curArtNr = cur.ArtNr
                    End If
                Catch ex As Exception
                    'Ignore
                End Try
                If curArtNr > 0 AndAlso neuePosition.ArtNr = cur.ArtNr Then
                    found = x
                    Exit For
                End If
            Next
            If found IsNot Nothing Then
                Buchvorgang_artikelBindingSource.MoveFirst()
                'Dim cur As dsVorgaenge._buchvorgang_artikelRow = GetVorgangPosition()
                While Buchvorgang_artikelBindingSource.Current.Item("ArtNr") <> found.Item("ArtNr")
                    Buchvorgang_artikelBindingSource.MoveNext()
                End While

                If Buchvorgang_artikelBindingSource.Current IsNot Nothing Then
                    Dim pos = GetVorgangPosition()
                    selbeArtikel = pos.ArtNr = neuePosition.ArtNr
                End If
            End If
            'end selbe artikel positionieren

        Catch ex As Exception
            HandleAppError(ex, Silent:=True)
        End Try
        Return selbeArtikel
    End Function

    Sub PositionMarkierenByID(pos As ArtikelPosition)
        Dim posInDG = 0
        Buchvorgang_artikelBindingSource.CancelEdit()
        For Each x As DataRowView In Buchvorgang_artikelBindingSource
            Dim cur As dsVorgaenge._buchvorgang_artikelRow = CType(x.Row, dsVorgaenge._buchvorgang_artikelRow)
            If pos.ID = cur.ID Then
                Buchvorgang_artikelBindingSource.Position = posInDG
            End If
            posInDG += 1
        Next
    End Sub

    ''' <summary>
    ''' TODO: Problem ist hier dass nicht gleichzeitig Pizza und Bar ausgedruckt werden kann.
    ''' </summary>
    ''' <param name="vorgangInBearbeitung"></param> 
    ''' <param name="Ziel">Kueche, Bar, Pizza - Hängt mit dem Drucker wo welchen Drucker gibt</param> 
    ''' <remarks></remarks>
    Public Sub AuftragKueche(vorgangInBearbeitung As VorgangInBearbeitung, Ziel As String)
        Try
            Dim content = ModuleBuchVorgang.AuftragKueche(vorgangInBearbeitung, Ziel)
            If content IsNot Nothing Then
                RaiseEvent VorgangInfo(content)
            End If

            'Reload 
            LadeVorgangNummer(vorgangInBearbeitung.Typ, vorgangInBearbeitung.Nummer, False)
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub


    ''' <summary>
    ''' 
    ''' </summary>
    ''' <param name="vorgangInBearbeitung"></param> 
    ''' <remarks></remarks>
    Friend Sub Zwischenrechnung(vorgangInBearbeitung As VorgangInBearbeitung)
        Try

            Dim vorgangInfo As String = OpenAusdruck_InWord_Filename_RTF(vorgangInBearbeitung.Typ,
                                                                                                vorgangInBearbeitung.Nummer,
                                                                                                VORLAGE_RECHNUNG,
                                                                                                True)
            If IO.File.Exists(vorgangInfo) Then
                Dim content As String = IO.File.ReadAllText(vorgangInfo)
                RaiseEvent vorgangInfo(content)
            End If

            'Print 
            PrintFile(vorgangInfo, VarValue_Default(PRINT_PORT, "/d:lpt3"))
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    Private Sub AbstractVorgangForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Try
            PREIS_GENAUIGKEIT = 4 ' Wichting 4 Nachkommastellen, sonst ist Berechung von MWST beim Vorgang auf Grund Rundungsfehler nicht korrekt
            Silent = VarValue_Default(BARRECHNUNG_SILENT, "true")
        Catch ex As Exception
            HandleAppError(ex, Silent:=True)
        End Try
    End Sub

    Public Function GetNextPosID(buchvorgang_artikelBindingSource As BindingSource)
        Dim maxID = 0
        For Each r As DataRowView In buchvorgang_artikelBindingSource.List
            If Not IsDBNull(r.Item("ID")) AndAlso r.Item("ID") > maxID Then
                maxID = r.Item("ID")
            End If
        Next
        Return maxID + 1
    End Function

#Region "Rabatt"

    Protected Sub ArtikelRabatt(ea As ArtikelPosition)
        Try
            If Not IsEditable() Then Return

            Buchvorgang_artikelBindingSource.MoveFirst()
            While Buchvorgang_artikelBindingSource.Current.row.ID <> ea.ID
                Buchvorgang_artikelBindingSource.MoveNext()
            End While
            If Not IsNull(Buchvorgang_artikelBindingSource.Current) Then
                Dim pos As dsVorgaenge._buchvorgang_artikelRow = Buchvorgang_artikelBindingSource.Current.row
                If pos.ArtNr = ea.ArtNr Then
                    Dim pos1 As dsVorgaenge._buchvorgang_artikelRow = Buchvorgang_artikelBindingSource.Current.row

                    Dim rabattText = "Rabatt " & ea.Rabatt & "%"
                    If ea.RabattEuro > 0 Then
                        rabattText = "Rabatt " & ea.RabattEuro & "€"
                    End If
                    SkontoAnwenden(pos1, ea.Rabatt, ea.RabattEuro, rabattText)
                End If
            End If

            SaveEdits()
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    Protected Sub RechnungRabatt(vorgangInBearbeitung As VorgangInBearbeitung, rabattInProcent As Integer)
        Try
            If Not IsEditable() Then Return
            Dim vorgang As dsVorgaenge.buchvorgangRow = GetVorgang()

            For Each pos In vorgang._Getbuchvorgang_artikelRows
                SkontoAnwenden(pos, rabattInProcent, 0, "Rabatt " & rabattInProcent & "%")
            Next


            SaveEdits()
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub


    ''' <summary>
    ''' 
    ''' </summary>
    ''' <param name="skonto"></param>
    ''' <param name="skontoEuro"></param>
    ''' <param name="skontoText"></param>
    ''' <remarks></remarks>
    Sub SkontoAnwenden(vorgangRow As dsVorgaenge._buchvorgang_artikelRow, skonto As Decimal, skontoEuro As Decimal, skontoText As String)

        If skonto > 0 Then
            SetVorgangEigenschaft("Skonto für Artikel " & vorgangRow.ArtNr, skontoText)
            'skonto = Math.Round(100 * skonto / (100 + GetMWSTArtikel(vorgangRow.Item("ArtNr"))), 2)
            vorgangRow.Item("Preis_Netto") = vorgangRow.Item("Preis_Netto") * (100 - skonto) / 100
        End If

        If skontoEuro > 0 Then
            SetVorgangEigenschaft("Skonto für Artikel " & vorgangRow.ArtNr, skontoEuro)
            skontoEuro = Math.Round(100 * skontoEuro / (100 + intrasell.preise.GetMWSTArtikel(vorgangRow.Item("ArtNr"))), 2)
            vorgangRow.Item("Preis_Netto") = vorgangRow.Item("Preis_Netto") - skontoEuro
        End If

        If skonto > 0 OrElse skontoEuro > 0 Then
            If vorgangRow.Item("Preis_Netto") <= 0 Then
                vorgangRow.Item("Preis_Netto") = 0.001 'sonst wird der alte Preis neu berechnet
            End If
            vorgangRow.Preis_Netto = vorgangRow.Item("Preis_Netto")
            vorgangRow.Bezeichnung = vorgangRow.Bezeichnung & " " & skontoText
            ReCalculatePositionNachRabatt(vorgangRow)
        End If

    End Sub

#End Region

    Function SaveEdits() As Boolean
        Dim abgeschlossen = IstVorgangAbgeschlossen(GetVorgang.Typ, GetVorgang.Nummer)

        If abgeschlossen Then
            Dim msg = $"Speichern ist nicht erlaubt! Vorgang {GetVorgang.Typ}-{GetVorgang.Nummer} wurde bereits abgeschlossen!"
            'Throw New Exception(msg)
            WriteLog(msg)
            Return False
        End If

        Try

            Validate()
            BuchvorgangBindingSource.EndEdit()
            Try
                Buchvorgang_artikelBindingSource.EndEdit()
            Catch ex As Exception
                If Not ex.Message.Contains("ArtNr") Then
                    Throw ex
                End If
            End Try

            BuchvorgaengeeigenschaftenBindingSource.EndEdit()

            If Not GetVorgang.IsKundNr2Null AndAlso GetVorgang.KundNr2 = 0 Then
                GetVorgang.KundNr2 = Nothing
            End If

            BuchvorgaengeeigenschaftenTableAdapter.Update(DsVorgaenge.buchvorgaengeeigenschaften)
            TableAdapterManager.UpdateAll(DsVorgaenge)
            Return True
        Catch ex As Exception
            If Not Silent Then
                HandleAppError(ex)
            Else
                WriteLog("Error in SaveEdits " & ex.Message)
                Throw ex
            End If
            Return False
        End Try
    End Function

    Friend Sub RaiseEvent_ArtikelAenderung()
        Try
            Dim vorgang As dsVorgaenge.buchvorgangRow = GetVorgang()
            Dim positionRow As dsVorgaenge._buchvorgang_artikelRow = Buchvorgang_artikelBindingSource.Current.row
            RaiseEvent ArtikelAenderung(positionRow.ArtNr, positionRow.Preis_Brutto, vorgang.SummeBrutto, vorgang)
        Catch ex As Exception
            HandleAppError(ex, Silent:=True)
        End Try
    End Sub

    Friend Sub ReCalculatePositionNachRabatt(pos As dsVorgaenge._buchvorgang_artikelRow)
        Try
            If pos IsNot Nothing Then
                pos.MWST = Nothing
                pos.Preis_Brutto = Nothing
                RecalculatePosition(pos)
            End If
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    ''' <summary>
    ''' Setze alle preise zurück und die Position neu berechnen 
    ''' </summary>
    ''' <remarks></remarks>
    Friend Sub StkChanged()
        Try
            If Buchvorgang_artikelBindingSource.Current Is Nothing Then Return
            Dim r = GetVorgangPosition()
            If r Is Nothing Then Return
            r.Preis_Netto = Nothing
            r.MWST = Nothing
            r.Preis_Brutto = Nothing
            RecalculateCurrentPosition()
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    Friend Sub Preis_NettoTextBox_Validated()
        Try
            If Buchvorgang_artikelBindingSource.Current Is Nothing Then Return
            Dim pos = GetVorgangPosition()
            If pos IsNot Nothing Then
                pos.MWST = Nothing
                pos.Preis_Brutto = Nothing
                RecalculateCurrentPosition()
            End If
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    ''' <summary>
    ''' Berechne MWST+Netto aus Brutto 
    ''' </summary>
    ''' <remarks></remarks>
    Friend Sub Preis_BruttoTextBox_Validated()
        Try

            If Buchvorgang_artikelBindingSource.Current Is Nothing Then Return
            Dim pos = GetVorgangPosition()
            If pos IsNot Nothing Then
                Dim LieferLandISO2 = GetLieferLandISO2(GetVorgang.Typ, GetVorgang.Nummer)
                Dim mwstSatz = intrasell.preise.GetMWSTArtikel(pos.ArtNr, IDNR:=GetVorgang.KundNr, LieferLandISO2:=LieferLandISO2) ' ArtikelMWST(pos.ArtNr)
                pos.Preis_Netto = Math.Round(pos.Preis_Brutto * 100 / (100 + mwstSatz), PREIS_GENAUIGKEIT)
                pos.MWST = pos.Preis_Brutto - pos.Preis_Netto
                RecalculateCurrentPosition()
            End If

        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    ''' <summary>
    ''' Die Aktuelle Artikel Position berechnen
    ''' </summary>
    ''' <remarks></remarks>
    Sub RecalculateCurrentPosition()
        Try
            RecalculatePosition(Buchvorgang_artikelBindingSource.Current.row)
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    ''' <summary>
    ''' Eine Artikel Position berechnen.
    ''' </summary>
    ''' <param name="r"></param>
    ''' <remarks></remarks>
    Sub RecalculatePosition(ByRef r As dsVorgaenge._buchvorgang_artikelRow, Optional berechneVorgangSummenJetzt As Boolean = True)
        Try
            NachArtNrAktualisierungBerechnePreisUndBezeichnung(r)
            If (berechneVorgangSummenJetzt) Then
                BerechneVorgangSummen(GetVorgang())
            End If
            Buchvorgang_artikelBindingSource.EndEdit()
            'RaiseEvent_ArtikelAenderung()
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    ''' <summary>
    ''' Zustellung Modus aktivieren
    ''' </summary>
    ''' <param name="TransportMethode"></param>
    ''' <remarks></remarks>
    Friend Sub Zustellung(TransportMethode As String)
        Try
            SaveEdits()
            GetVorgang().TransportMethode = TransportMethode
            SaveEdits()
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub


    ''' <summary>
    ''' Kunde geaendert
    ''' </summary>
    ''' <param name="IDNR"></param>
    ''' <param name="Notiz"></param>
    ''' <param name="TransportMethode"></param>
    ''' <remarks></remarks>
    Friend Sub KundeGeaendert(IDNR As Integer, Notiz As String, TransportMethode As String)
        Try
            GetVorgang().KundNr = IDNR
            GetVorgang().Notiz = Notiz
            GetVorgang().TransportMethode = TransportMethode
            SaveEdits()
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    ''' <summary>
    ''' Preis Brutto geaendert 
    ''' </summary>
    ''' <param name="artikelPosition"></param>
    ''' <remarks></remarks>s
    Friend Sub ArtikelPreisGeaendert(artikelPosition As ArtikelPosition)
        Try
            WriteLog("ArtikelPreisGeaendert. ArtikelPosition " & artikelPosition.ToString)
            PositionMarkierenByID(artikelPosition)

            Dim pos As dsVorgaenge._buchvorgang_artikelRow = Buchvorgang_artikelBindingSource.Current.row
            pos.Preis_Brutto = artikelPosition.Preis_Brutto
            Preis_BruttoTextBox_Validated()
            SaveEdits()
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    ''' <summary>
    ''' Vorgang drucken
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <remarks></remarks>
    Public Sub Print(sender As Object) Implements InterfacePrintable.Print
        Dim oldSilent = Silent
        Try
            Cursor = Cursors.WaitCursor

            Silent = True 'Keine Promts zum speichern
            SaveEdits()

            'Eigene Vorlage je Typ und Mandant. z.Bsp. Vorgang_AR_MANDANT_1.dot
            'Mit Möglichkeit einzustellen.

            Dim VarnameVorlage = "DEFAULT_WORD_VORLAGE_VORGANG_" & GetVorgang().Typ
            Try
                VarnameVorlage = VarnameVorlage & "_MANDANT_" & GetVorgang().MandantNr
            Catch ex As Exception
                HandleAppError(ex, Silent:=True)
            End Try

            Dim VorlageDatei = VarValue_Default(VarnameVorlage, DEFAULT_WORD_VORLAGE_VORGANG)
            WriteLog("Vorlage kann mit Einstellung " & VarnameVorlage & " konfiguriert werden.")
            WriteLog("Aktuelle Vorlage: " & VorlageDatei)
            OpenAusdruck_inWord_XML(GetVorgang().Typ, GetVorgang().Nummer,
                                    VorlageDatei, VIEWER_WORD, Silent:=False)

            SetAusgedruckt(GetVorgang.Typ, GetVorgang.Nummer)

            If Not GetVorgang().Ausgedruckt Then
                GetVorgang().Ausgedruckt = True
                SaveEdits()
            End If

            SetVorgangStatus(GetVorgang().Typ, GetVorgang().Nummer, VorgangStatus.AUSGEDRUCKT, MitarbeiterID, silent:=True)
        Catch ex As Exception
            HandleAppError(ex)
        Finally
            Cursor = Cursors.Default
            Silent = oldSilent
        End Try
    End Sub

    ''' <summary>
    ''' HTML Druck
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub HTMLPrint()
        Try
            Cursor = Cursors.WaitCursor
            If Not IstVorgangAbgeschlossen(GetVorgang.Typ, GetVorgang.Nummer) Then
                SaveEdits()
            End If
            Dim resultFile = OpenAusdruck_InWord_Filename_RTF(GetVorgang().Typ, GetVorgang().Nummer, DEFAULT_HTML_VORLAGE_VORGANG, True)
            Process.Start("file://" & resultFile)
            If MsgBox("Als Gedruckt markieren?", MsgBoxStyle.YesNo) = vbYes Then
                ModuleBuchVorgang.SetAusgedruckt(GetVorgang.Typ, GetVorgang.Nummer)
            End If
            LadeVorgangErneut()
        Catch ex As Exception
            HandleAppError(ex)
        Finally
            Cursor = Cursors.Default
        End Try
    End Sub

    ''' <summary>
    ''' HTML Druck, dann Mail
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub HTMLPrint_PDF_Mail()
        Try
            Cursor = Cursors.WaitCursor
            Dim vorgang = GetVorgang()
            If Not IstVorgangAbgeschlossen(vorgang.Typ, vorgang.Nummer) Then
                SaveEdits()
            End If

            ModulePDF.HTMLPrint_PDF_Mail(vorgang)
            ModuleBuchVorgang.SetAusgedruckt(vorgang.Typ, vorgang.Nummer)
            LadeVorgangErneut()
        Catch ex As Exception
            HandleAppError(ex)
        Finally
            Cursor = Cursors.Default
        End Try
    End Sub

    Public Sub HTMLPrint_PDF_Mailform()
        Try
            Cursor = Cursors.WaitCursor
            Dim vorgang = GetVorgang()
            If Not IstVorgangAbgeschlossen(vorgang.Typ, vorgang.Nummer) Then
                SaveEdits()
            End If

            Dim mail = KundenEmailVorbereiten(vorgang.Typ, vorgang.Nummer)
            mail.FilePath = ModulePDF.HTMLPrint_PDF(vorgang)
            Dim emailForm = MailAnKundeMitDatei(mail)
            AddHandler emailForm.FormClosing, AddressOf EmailSpeichern

        Catch ex As Exception
            HandleAppError(ex)
        Finally
            Cursor = Cursors.Default
        End Try
    End Sub

    Private Sub EmailSpeichern(sender As Object, e As FormClosingEventArgs)
        Dim emailForm As MailSenden = sender
        If emailForm IsNot Nothing AndAlso emailForm.txtEmailEmpfänger.Text.Length > 0 Then
            Dim cmd As New MySqlCommand("update ofAdressen set Email = @Email where idnr in ( select kundnr from buchVorgang  where typ=@Typ and nummer=@Nummer)")
            cmd.Parameters.AddWithValue("Email", emailForm.txtEmailEmpfänger.Text)
            cmd.Parameters.AddWithValue("Typ", GetVorgang.Typ)
            cmd.Parameters.AddWithValue("Nummer", GetVorgang.Nummer)
            RunSQL(cmd)
        End If
    End Sub

    Sub DruckVorlage()
        VorgangDruck.Init(GetVorgang().Typ, GetVorgang().Nummer, GetVorgang().KundNr)
        VorgangDruck.ShowDialog()
        VorgangDruck.Dispose()
    End Sub

    Friend Sub DruckMonatsBeleg()
        Try
            If DruckeMonatsBeleg() Then
                Close()
            End If
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub


    ''' <summary>
    ''' Zweiter Ausdruck
    ''' </summary>
    ''' <param name="vorgang"></param>
    ''' <remarks></remarks>
    Friend Sub DruckAktuellerBeleg(vorgang As VorgangInBearbeitung)
        VorgangDrucken(vorgang.Typ, vorgang.Nummer, isUeberleitung:=False, showPreview:=VarValue_Default(PRINT_AM_BILDSCHIRM, False))
    End Sub

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Friend Sub DruckLetzterBeleg(sender As Object, e As EventArgs)
        Try
            Cursor.Current = Cursors.WaitCursor
            Dim cmd As New MySqlCommand("Select Nummer from buchVorgang where Typ='AR' and abgeschlossen <> 0 and datum > DATE_ADD(CURRENT_TIMESTAMP, INTERVAL -1 DAY)  order by datum desc limit 1")
            Dim Nummer = FirstRow(cmd)
            If IsNumeric(Nummer) Then
                PrintVorgangBarOhneUeberleitung(VorgangTypen.AR, Nummer)
            End If
        Catch ex As Exception
            HandleAppError(ex)
        Finally
            Cursor.Current = Cursors.Default
        End Try
    End Sub

    Sub SetFormName()
        Try
            Dim vorgang = GetVorgang()
            Text = String.Format("Vorgang {0}-{1}, KundNr {2} ", vorgang.Typ, vorgang.Nummer, vorgang.KundNr)
        Catch ex As Exception
            HandleAppError(ex, Silent:=True)
        End Try
    End Sub


    ''' <summary>
    ''' Neuer Vorgang starten 
    ''' </summary>
    ''' <param name="VorgangTyp"></param>
    ''' <param name="KundNr"></param>
    ''' <param name="Notiz"></param>
    ''' <param name="LieferMethode"></param>
    ''' <remarks></remarks>
    Public Sub BeginNewVorgang_AbstractVorgangMittouchForm(VorgangTyp As String, KundNr As Integer,
                               Optional Notiz As String = "",
                               Optional LieferMethode As String = "")
        Try
            WriteLog("BeginNewVorgang_AbstractVorgangMittouchForm " & VorgangTyp & ", KundNr " & KundNr)
            Dim vorgangBereitsOffen = GetLetzterOffenerVorgang(VorgangTyp, KundNr)
            If IsNumeric(vorgangBereitsOffen) Then
                LadeVorgangNummer(Typ:=VorgangTyp, Nummer:=vorgangBereitsOffen)
                Return
            End If

            DsVorgaenge.buchvorgaengeeigenschaften.Clear()
            DsVorgaenge._buchvorgang_artikel.Clear()
            DsVorgaenge.buchvorgang.Clear()

            BuchvorgangBindingSource.AddNew()
            Dim vorgang = GetVorgang()
            vorgang.KundNr = KundNr
            vorgang.Typ = VorgangTyp
            vorgang.Nummer = intrasell.vorgang.GetNewVorgangNummer(VorgangTyp, KundNr)
            vorgang.Datum = Date.Now
            vorgang.MitarbeiterNr = MitarbeiterID
            vorgang.Notiz = Notiz
            vorgang.TransportMethode = LieferMethode

            'folgende 3 zeilen damit die rows in artikel die parent typ und nummer übernehmen.
            Validate()
            BuchvorgangBindingSource.EndEdit()
            Buchvorgang_artikelBindingSource.EndEdit()
            If vorgang.KundNr <> KundNr Then
                Dim msg = String.Format("Vorgang KundNr {0} wurde von einem anderen Thread modifiziert. Es wurde {1} gesetzt.", KundNr, vorgang.KundNr)
                Throw New Exception(msg)
            End If
            vorgang.KundNr = KundNr
            RaiseEvent VorgangGeladen()
            SetFormName()
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    ''' <summary>
    '''Ein Neuer Vorgang vom Typ Starten  
    ''' </summary>
    ''' <param name="VorgangTyp"></param>
    ''' <param name="KundNr"></param>
    ''' <remarks></remarks>
    Public Sub BeginNewVorgang(VorgangTyp As String, KundNr As Integer,
                               Optional Notiz As String = "",
                               Optional LieferMethode As String = "")
        Try
            WriteLog("BeginNewVorgang " & VorgangTyp & ", KundNr " & KundNr)
            Dim existVorgangNummmer = ExistiertNichtAbgeschlossenVorgang(VorgangTyp, KundNr)
            If existVorgangNummmer > 0 Then
                Dim msg As String = String.Format("Ein alter Vorgang mit der Nummer {0}-{1} wurde noch nicht abgeschlossen. Der Vorgang wird nun wieder geöffnet.", VorgangTyp, existVorgangNummmer)
                ShowUserMessage(msg, "Warning", vbInformation, Silent)
                LadeVorgangNummer(Typ:=VorgangTyp, Nummer:=existVorgangNummmer)
            Else
                DsVorgaenge.buchvorgaengeeigenschaften.Clear()
                DsVorgaenge._buchvorgang_artikel.Clear()
                DsVorgaenge.buchvorgang.Clear()

                Dim newRow As DataRowView = BuchvorgangBindingSource.AddNew()
                Dim vorgangRow As dsVorgaenge.buchvorgangRow = newRow.Row
                vorgangRow.KundNr = KundNr
                vorgangRow.Typ = VorgangTyp
                vorgangRow.Nummer = intrasell.vorgang.GetNewVorgangNummer(VorgangTyp, KundNr)
                vorgangRow.Datum = Date.Now
                vorgangRow.MitarbeiterNr = MitarbeiterID
                vorgangRow.Notiz = Notiz
                vorgangRow.TransportMethode = LieferMethode
                'folgende 3 zeilen damit die rows in artikel die parent typ und nummer übernehmen.
                Validate()
                BuchvorgangBindingSource.EndEdit()
                Buchvorgang_artikelBindingSource.EndEdit()

                GetVorgang.KundNr = KundNr
                RaiseEvent VorgangGeladen()
            End If

            RaiseEvent SetButtonsEvent(neu:=False)
            'Neue Position 
            AddNewPos()
            SaveEdits() 'Gleich speichern, damit Vorgang Nr nicht von Online Bestellungen geschnappt wird.
            SetFormName()
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Function AddNewPos() As dsVorgaenge._buchvorgang_artikelRow
        If Not IsNull(Buchvorgang_artikelBindingSource.Current) Then
            Dim row As dsVorgaenge._buchvorgang_artikelRow = Buchvorgang_artikelBindingSource.Current.row
            Dim artnr As Integer = -1
            Try
                artnr = row.ArtNr
            Catch
                'Ignore
            End Try
            If artnr = -1 AndAlso IsNumeric(row.ID) AndAlso row.Typ = GetVorgang().Typ AndAlso IsNumeric(row.Nummer) Then
                Return row
            End If
        End If
        Buchvorgang_artikelBindingSource.AddNew()
        Dim newPositionRow As dsVorgaenge._buchvorgang_artikelRow = Buchvorgang_artikelBindingSource.Current.row
        newPositionRow.ID = GetNextPosID(Buchvorgang_artikelBindingSource)

        Dim vorgang = GetVorgang()
        newPositionRow.Typ = vorgang.Typ
        newPositionRow.Nummer = vorgang.Nummer
        Refresh()
        Return newPositionRow
    End Function

    ''' <summary>
    ''' TODO: NeuePosition mit AddNewPos Funktion zusammenführen.
    ''' </summary>
    Friend Sub NeuePosition()
        Try
            Buchvorgang_artikelBindingSource.AddNew()
            Buchvorgang_artikelBindingSource.Current.row.ID = GetNextPosID(Buchvorgang_artikelBindingSource)
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

#Region "von form AbstractVorgangBar"
    ''' <summary>
    ''' Wenn Artikel von einem Touch Screen erfasst werden (Restaurant mode) 
    ''' </summary> 
    ''' <param name="ea">Artikel Position</param>
    ''' <remarks></remarks>
    Public Sub ArtikelErfasst(ea As ArtikelPosition)
        Try
            Cursor = Cursors.WaitCursor
            If Not IsEditable() Then Return
            WriteLog("ArtikelErfasst Artikel " & ea.ToString)
            If IsNull(Buchvorgang_artikelBindingSource.Current) Then
                AddNewPos()
                Dim pos As dsVorgaenge._buchvorgang_artikelRow = Buchvorgang_artikelBindingSource.Current.row
                pos.ID = 1
                pos.ArtNr = ea.ArtNr
                pos.Stk = ea.Stk
                pos.Spezifikation = ea.Spezifikation
                ArtNr_Changed_Base(ea.ArtNr)
            Else
                Dim pos As dsVorgaenge._buchvorgang_artikelRow = Buchvorgang_artikelBindingSource.Current.row

                Dim istGleichePosition = PositionMarkieren(ea)

                If istGleichePosition Then
                    pos = Buchvorgang_artikelBindingSource.Current.row

                    Dim neueMenge = pos.Stk + ea.Stk
                    If neueMenge <= 0 AndAlso MsgBox("Neue Menge " & neueMenge & ". Übernehmen mit JA bestätigen!", vbYesNo) = vbNo Then
                        Return
                    End If

                    pos.Stk += ea.Stk
                    RecalculateCurrentPosition()
                Else 'neuer artikel  
                    AddNewPos()
                    pos = Buchvorgang_artikelBindingSource.Current.row
                    pos.ArtNr = ea.ArtNr
                    pos.Stk = ea.Stk
                    pos.Spezifikation = ea.Spezifikation
                    ArtNr_Changed_Base(ea.ArtNr)
                End If
            End If
            'Vorgandatum aktualisieren 
            GetVorgang().Datum = DateTime.Now
            SaveEdits()
            RaiseEvent_ArtikelAenderung()
        Catch ex As Exception
            HandleAppError(ex, Silent:=True)
        Finally
            Cursor = Cursors.Default
        End Try
    End Sub

    Public Sub ArtikelEntfernt(ea As ArtikelPosition)
        Try
            If Not IsEditable() Then Return

            If Not HasRecht(Rechte.Kuechen_Positionen_löschen) Then
                Return
            End If

            WriteLog("ArtikelEntfernt Artikel " & ea.ToString)
            Dim found = Nothing ' As dsVorgaenge._buchvorgang_artikelRow
            For Each r In Buchvorgang_artikelBindingSource
                If r("ID") = ea.ID Then
                    found = r
                End If
            Next

            'Pruefung ob entfernbar ist 
            If found IsNot Nothing Then
                If Not IsDBNull(found("Status")) AndAlso
                    CStr(found("Status")) = "KUECHE" AndAlso Not HasRecht(Rechte.Kuechen_Positionen_löschen) Then
                    WriteLog("Artikel wird nicht entfernt. Der Mitarbeiter hat keine Berechtigung.")
                    Return
                End If
                Buchvorgang_artikelBindingSource.Remove(found)
                BerechneVorgangSummen(GetVorgang())
                SaveEdits()
            End If
        Catch ex As Exception
            HandleAppError(ex, Silent:=True)
        End Try
    End Sub

    ''' <summary>
    ''' Artikel Nummer wurde geändert
    ''' </summary>
    ''' <param name="newArtNr"></param>
    ''' <remarks></remarks>
    Friend Sub ArtNr_Changed_Base(newArtNr As Object)
        Try
            If newArtNr Is Nothing Then Return
            'neue position starten wenn noch keine angefangen wurde
            If Buchvorgang_artikelBindingSource.Current Is Nothing Then
                AddNewPos()
            End If

            Dim pos As dsVorgaenge._buchvorgang_artikelRow = Buchvorgang_artikelBindingSource.Current.row
            If pos.ID = 0 Then
                pos.ID = 1
            End If
            pos.ArtNr = newArtNr
            Try
                If pos.Stk = 0 Then
                    pos.Stk = 1
                End If
            Catch ex As Exception
                pos.Stk = 1
            End Try

            pos.Typ = GetVorgang().Typ
            pos.Nummer = GetVorgang().Nummer
            'entferne alte Daten falls vorhanden  (Änderung der Artikel Nummer)
            pos.Bezeichnung = ""
            pos.Preis_Netto = Nothing
            pos.MWST = Nothing
            pos.Preis_Brutto = Nothing
            pos.Zeitpunkt = Now
            RecalculateCurrentPosition()
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

#End Region

    Friend Sub RaiseEventSetButtonsEvent(neu As Boolean)
        RaiseEvent SetButtonsEvent(neu)
    End Sub

    Sub VorgangStornoMitEvent()
        If VorgangStorno(GetVorgang().Typ, GetVorgang().Nummer, silent:=Silent) Then
            EventErstellen("Mitarbeiter " & MitarbeiterID & " hat einen Vorgang über " & SummeNetto & " € storniert.")
            Close()
        End If
    End Sub

    Sub VorgangAbschliessenMitEvent()
        Try

            If VorgangAbschliessen(GetVorgang().Typ, GetVorgang().Nummer, Silent) Then
                'Event einfügen 
                EventErstellen("Mitarbeiter " & MitarbeiterID & " hat einen Vorgang über " & SummeNetto & " € abgeschloßen.")
                LadeVorgangNummer(GetVorgang.Typ, GetVorgang.Nummer, raiseEventVorgangGeladen:=False)
                'CheckAbgeschlossen()
                RaiseEventSetButtonsEvent(False)
            End If

        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    Sub KassabuchungEintragUndSetBezahlt()
        Dim vorgang As dsVorgaenge.buchvorgangRow = GetVorgang()
        If vorgang.Typ = VorgangTypen.AR Then
            If MsgBox("Betrag eingehoben?", vbYesNo) = vbYes Then
                'kassabuch eintrag
                MakeKassaBuchEintrag(Now(), vorgang.Typ, vorgang.Typ & "-" & vorgang.Nummer, vorgang.SummeBrutto,
                                      vorgang.MitarbeiterNr, vorgang.ZahlungsMethode, vorgang.Typ, vorgang.Nummer)
                SetBezahlt(vorgang.Typ, vorgang.Nummer)
                vorgang.Bezahlt = True
            End If
        End If
    End Sub

End Class