Imports IntraSell_DLL
Imports IntraSell_Net_Base

Public Class AbstractVorgangMitTouchForm
    Inherits AbstractVorgangForm

    Public Event VorgangAbgeschlossen(Endsume As Decimal)
    Public Event VorgangClosing()

    Private Sub AbstractVorgangMitTouchForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        AddHandler VorgangGeladen, AddressOf VorgangGeladenHandler
    End Sub

    Shadows Sub RecalculateCurrentPosition()
        Try
            RecalculatePosition(Buchvorgang_artikelBindingSource.Current.row)
            BerechneVorgangSummen(GetVorgang())
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

#Region "Touch"

    Dim touch As TouchErfassung = Nothing

    Public Function GetTouch() As TouchErfassung
        Return touch
    End Function

    Private Sub ButtonTouch_Click(sender As Object, e As EventArgs) Handles ButtonTouch.Click
        ShowTouch()
    End Sub

    Private Sub RegisterTouch()
        If touch IsNot Nothing Then
            AddHandler touch.ArtikelErfasst, AddressOf ArtikelErfasst
            AddHandler touch.ArtikelEntfernt, AddressOf ArtikelEntfernt
            AddHandler touch.ArtikelRabatt, AddressOf ArtikelRabatt
            AddHandler touch.RechnungRabatt, AddressOf RechnungRabatt
            AddHandler touch.KassaAbschliessen, AddressOf KassaAbschliessen
            AddHandler touch.FormGeschlossen, AddressOf TouchGeschlossen
            AddHandler touch.Ausschuss, AddressOf VorgangAusschuss
            AddHandler touch.DruckLetzterBeleg, AddressOf DruckLetzterBeleg
            AddHandler touch.DruckAktuellerBeleg, AddressOf DruckAktuellerBeleg
            AddHandler touch.AuftragKueche, AddressOf AuftragKueche
            AddHandler touch.RechnungVorschauDruck, AddressOf Zwischenrechnung
            AddHandler touch.Storno, AddressOf Storno
            AddHandler touch.Zustellung, AddressOf Zustellung
            AddHandler touch.KundeGeaendert, AddressOf KundeGeaendert
            AddHandler VorgangInfo, AddressOf VorgangInfoHandler
            AddHandler touch.BezahltMitBankomat, AddressOf BezahltMitBankomat
            AddHandler touch.BezahltMitZahlungsmethode, AddressOf BezahltMitZahlungsmethode
            AddHandler touch.VorgangParken, AddressOf VorgangParken
            AddHandler touch.ArtikelPreisGeaendert, AddressOf ArtikelPreisGeaendert
            AddHandler touch.DruckMonatsBeleg, AddressOf DruckMonatsBeleg
            AddHandler touch.BelegSenden, AddressOf BelegSenden
        End If
    End Sub

    Private Sub UnregisterTouch()
        If touch IsNot Nothing Then
            RemoveHandler touch.ArtikelErfasst, AddressOf ArtikelErfasst
            RemoveHandler touch.ArtikelEntfernt, AddressOf ArtikelEntfernt
            RemoveHandler touch.ArtikelRabatt, AddressOf ArtikelRabatt
            RemoveHandler touch.RechnungRabatt, AddressOf RechnungRabatt
            RemoveHandler touch.KassaAbschliessen, AddressOf KassaAbschliessen
            RemoveHandler touch.FormGeschlossen, AddressOf TouchGeschlossen
            RemoveHandler touch.Ausschuss, AddressOf VorgangAusschuss
            RemoveHandler touch.DruckLetzterBeleg, AddressOf DruckLetzterBeleg
            RemoveHandler touch.DruckAktuellerBeleg, AddressOf DruckAktuellerBeleg
            RemoveHandler touch.AuftragKueche, AddressOf AuftragKueche
            RemoveHandler touch.RechnungVorschauDruck, AddressOf Zwischenrechnung
            RemoveHandler touch.Storno, AddressOf Storno
            RemoveHandler touch.Zustellung, AddressOf Zustellung
            RemoveHandler touch.KundeGeaendert, AddressOf KundeGeaendert
            RemoveHandler VorgangInfo, AddressOf VorgangInfoHandler
            RemoveHandler touch.BezahltMitBankomat, AddressOf BezahltMitBankomat
            RemoveHandler touch.BezahltMitZahlungsmethode, AddressOf BezahltMitZahlungsmethode
            RemoveHandler touch.VorgangParken, AddressOf VorgangParken
            RemoveHandler touch.ArtikelPreisGeaendert, AddressOf ArtikelPreisGeaendert
            RemoveHandler touch.DruckMonatsBeleg, AddressOf DruckMonatsBeleg
            RemoveHandler touch.BelegSenden, AddressOf BelegSenden
        End If
    End Sub

    Sub ShowTouch()
        Try
            If touch IsNot Nothing Then
                Exit Sub
            End If
            touch = New TouchErfassung

            Controls.Clear()
            Controls.Add(touch)
            touch.Dock = DockStyle.Fill
            UnregisterTouch()
            RegisterTouch()
            VorgangGeladenHandler()
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub VorgangGeladenHandler()
        If BuchvorgangBindingSource.Current Is Nothing Then
            Exit Sub
        End If
        Dim current As dsVorgaenge.buchvorgangRow = BuchvorgangBindingSource.Current.row
        If touch Is Nothing Then
            Exit Sub
        End If

        touch.Vorgang = New VorgangInBearbeitung(current)

        touch.UpdateVorgangPreview()

        Dim vi As String = OpenAusdruck_InWord_Filename_RTF(current.Typ, current.Nummer, VORLAGE_INFO, True)
        If IO.File.Exists(vi) Then
            touch.VorgangInfo(IO.File.ReadAllText(vi))
        End If
    End Sub

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <param name="content"></param>
    ''' <remarks></remarks>
    Sub VorgangInfoHandler(content As String)
        touch.VorgangInfo(content)
    End Sub


    Private Sub BezahltMitBankomat()
        BezahltMitZahlungsmethode("Bankomat")
    End Sub

    Private Sub BezahltMitZahlungsmethode(methode As String)
        Try
            Dim v = GetVorgang()
            If v Is Nothing Then
                Throw New Exception("Vorgang nicht vorhanden!")
            End If
            v.ZahlungsMethode = methode
            v.GegebenBar = 0
            v.Restgeld = 0
            SaveEdits()
            'Vorgang abschliessen
            Dim vorgangInBearbeitung = New VorgangInBearbeitung(v)
            KassaAbschliessen(vorgangInBearbeitung)
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    ''' <summary>
    ''' Wird aufgerufen wenn Auftrag abgeschlossen wird 
    ''' </summary>
    ''' <param name="vorgangInBearbeitung"></param>
    ''' <remarks></remarks>
    Public Sub KassaAbschliessen(vorgangInBearbeitung As VorgangInBearbeitung)
        Try
            Cursor.Current = Cursors.WaitCursor
            'Vorgang konvertieren und Barrechnung zeigen 
            If vorgangInBearbeitung.Typ <> VorgangTypen.AU Then
                MsgBox(Messages.Vorgang_Abschliessen_Nur_Auftraege, vbExclamation)
                Return
            End If

            If vorgangInBearbeitung.ZahlungsMethode Is Nothing Then
                Dim msg = String.Format(Messages.ModuleBuchVorgang_Zahlungsmethode_fehlt, vorgangInBearbeitung.Typ, vorgangInBearbeitung.Nummer)
                MsgBox(msg, vbExclamation)
                Return
            End If

            Dim v = GetVorgang()

            'If v.IsZahlungsMethodeNull Then
            v.ZahlungsMethode = vorgangInBearbeitung.ZahlungsMethode
            'SaveEdits()
            SetZahlungsmethode(vorgangInBearbeitung.Typ, vorgangInBearbeitung.Nummer, vorgangInBearbeitung.ZahlungsMethode)
            'End If

            SetzeStatusNeuUndSendeEvents(vorgangInBearbeitung)

            Dim NewVorgang = KonvertiereVorgang(vorgangInBearbeitung, ZielVorgangTyp:=VorgangTypen.AR)
            If Not IsNull(NewVorgang) Then

                VorgangAbschliessenEinreihen(NewVorgang.Typ, NewVorgang.Nummer, silent:=Silent, pruefeGegebenBar:=Not BARRECHNUNG_KEINE_EINGABE_BAR_GEGEBEN)

                If VarValue_Default(RECHNUNG_BAR_NACH_ABSCHLIESSEN_NEU, "false") Then
                    BeginNewVorgang_AbstractVorgangMittouchForm(VorgangTyp:=vorgangInBearbeitung.Typ, KundNr:=vorgangInBearbeitung.KundNr)
                Else
                    Try
                        Controls.Clear()
                        Me.Close()
                    Catch ex1 As ObjectDisposedException
                        'Ignore
                    Catch ex As Exception
                        'Ignore
                    End Try
                End If
            End If
        Catch ex As Exception
            HandleAppError(ex)
        Finally
            Cursor.Current = Cursors.Default
        End Try
    End Sub


    Private Sub TouchGeschlossen(sender As Object, e As EventArgs)
        Try
            RaiseEvent VorgangClosing()
            Close()
        Catch ex As Exception
            HandleAppError(ex, Silent:=True)
        End Try
    End Sub

    Private Sub ButtonSchliessenTop_Click(sender As Object, e As EventArgs) Handles ButtonSchliessenTop.Click
        RaiseEvent VorgangClosing()
        Close()
    End Sub

    Private Sub Storno(vorgangInBear As VorgangInBearbeitung, silent As Boolean)
        Dim vorg = GetVorgang()
        If VorgangStorno(vorg.Typ, vorg.Nummer, silent:=silent) Then
            Close()
        End If
    End Sub

    Private Sub Vorgang_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
        Try
            If touch IsNot Nothing Then
                UnregisterTouch()
                'RemoveHandler touch.ArtikelErfasst, AddressOf ArtikelErfasst
                'RemoveHandler touch.ArtikelEntfernt, AddressOf ArtikelEntfernt
                'RemoveHandler touch.KassaAbschliessen, AddressOf KassaAbschliessen
                'RemoveHandler touch.FormGeschlossen, AddressOf TouchGeschlossen
                'RemoveHandler touch.Ausschuss, AddressOf VorgangAusschuss
                'RemoveHandler touch.AuftragKueche, AddressOf AuftragKueche
                'RemoveHandler touch.RechnungVorschauDruck, AddressOf Zwischenrechnung
                'RemoveHandler touch.Storno, AddressOf Storno
            End If
        Catch ex As Exception
        End Try
    End Sub
#End Region

    Shared Function GetForm() As AbstractVorgangMitTouchForm
        Return AbstractVorgangMitTouchForm
    End Function

    Private Sub VorgangParken(vorgang As VorgangInBearbeitung)
        UserMessagePopUp("Nicht erlaubt!", "Diese Funktion ist nicht vorhanden!", vbInformation)
    End Sub

    Private Sub BelegSenden(vorgang As VorgangInBearbeitung)
        Try
            HTMLPrint_PDF_Mailform()
        Catch ex As Exception
            HandleAppError(ex, Hilfe:="BelegSenden", Silent:=True)
        End Try
    End Sub

End Class