Imports IntraSell_DLL
Imports IntraSell_Net_Base

Public Interface IArtikelEditor
    Function ErrorProvider() As ErrorProvider
    Function BindingSource() As System.Windows.Forms.BindingSource
    Function GetBezeichnungTextBox() As Control
    Function GetPreisATSTextBox() As Control
    Function GetPreisATS_BruttoTextBox() As Control
    Function GetArtikelKategorieControl() As Control
    Function GetMWSTTextBox() As Control
    Function GetEANTextBox() As Control
    Function GetGrartikelTableAdapter() As IntraSell_Net_Base.dsArtikelTableAdapters.grartikelTableAdapter
    Function GetDsArtikel() As IntraSell_Net_Base.dsArtikel
    Function ValidateFrom() As Boolean
End Interface

Public Class ArtikelSave
    ''' <summary>
    ''' Validiere Form und Speichern
    ''' </summary>
    ''' <param name="editor"></param>
    ''' <returns>false wenn keine Berechtigung</returns>
    ''' <remarks></remarks>
    Shared Function Save(editor As IArtikelEditor) As Boolean

        Dim ErrorProvider1 = editor.ErrorProvider
        Dim GrartikelBindingSource = editor.BindingSource
        Dim BezeichnungTextBox = editor.GetBezeichnungTextBox
        Dim PreisATSTextBox = editor.GetPreisATSTextBox
        Dim PreisATS_BruttoTextBox = editor.GetPreisATS_BruttoTextBox
        Dim MWSTTextBox = editor.GetMWSTTextBox
        Dim EANTextBox = editor.GetEANTextBox
        Dim ArtikelKategorieControl1 = editor.GetArtikelKategorieControl

        If Not HasRecht(Rechte.Artikel, True) Then
            ErrorProvider1.Clear()
            ErrorProvider1.SetError(BezeichnungTextBox, "Berechtugung fehlt")
            Return False
        End If

        Try
            ErrorProvider1.Clear()
            editor.ValidateFrom()
            GrartikelBindingSource.EndEdit()

            'Validierungen 
            Dim artikel As dsArtikel.grartikelRow = GrartikelBindingSource.Current.Row

            If artikel.Bezeichnung = "" Then
                ErrorProvider1.SetError(BezeichnungTextBox, "Bezeichnung fehlt!")
                Return False
            End If

            If artikel.PreisATS = 0 And artikel.PreisATS_Brutto <> 0 Then
                ErrorProvider1.SetError(PreisATSTextBox, "Nettopreis fehlt!")
                Return False
            End If

            If artikel.PreisATS <> 0 And artikel.PreisATS_Brutto = 0 Then
                ErrorProvider1.SetError(PreisATS_BruttoTextBox, "Bruttopreis fehlt!")
                Return False
            End If

            If Not CBool(VarValue_Default(MWST_BEFREIT, "false")) Then
                'If artikel.MWST = 0 Then
                '    If Not artikel.IsDifferenzbesteuerungNull Then
                '        ErrorProvider1.SetError(MWSTTextBox, "MWST fehlt!")
                '    Else
                '        If artikel.Differenzbesteuerung Then
                '            ErrorProvider1.SetError(MWSTTextBox, "MWST muss 5, 10, 13 od. 20 %")
                '        End If
                '    End If
                '
                '    Return False
                'End If
                If artikel.MWST < 0 Or artikel.MWST > 20 Then
                    ErrorProvider1.SetError(MWSTTextBox, "MWST in Österreich ist 0% bis 20%.")
                    Return False
                End If
            End If

            ''Sicherstellen dass nur die selbe MWST je Kategorie benutzt wird
            'Dim mwstKategorie = FirstRow("select mwst from grartikel a where artkatnr = " & artikel.ArtKatNr & " limit 1")
            'If IsNumeric(mwstKategorie) Then
            '    If MWSTTextBox.Text <> mwstKategorie Then
            '        Dim msg = String.Format(Messages.Artikel_Validierung_MWST, mwstKategorie)
            '        ErrorProvider1.SetError(MWSTTextBox, msg)
            '        Return False
            '    End If
            'End If

            If artikel.ArtKatNr = 0 Then
                ErrorProvider1.SetError(ArtikelKategorieControl1, "Kategorie fehlt!")
                Return False
            End If

            editor.GetGrartikelTableAdapter.Update(editor.GetDsArtikel)

            InvalidateCache()
            Return True
        Catch ex As Exception
            If ex.Message.Contains("EAN") Then
                ErrorProvider1.SetError(EANTextBox, ex.Message)
                Return False
            End If
            If ex.Message.Contains("ArtKatNr") Then
                ErrorProvider1.SetError(ArtikelKategorieControl1, ex.Message)
                Return False
            End If
            If ex.Message.Contains("PreisATS") Then
                ErrorProvider1.SetError(PreisATSTextBox, ex.Message)
                Return False
            End If
            If ex.Message.Contains("PreisATS_Brutto") Then
                ErrorProvider1.SetError(PreisATS_BruttoTextBox, ex.Message)
                Return False
            End If
            If ex.Message.Contains("MWST") Then
                ErrorProvider1.SetError(MWSTTextBox, ex.Message)
                Return False
            End If
            If ex.Message.Contains("Bezeichnung") Then
                ErrorProvider1.SetError(BezeichnungTextBox, ex.Message)
                Return False
            End If
            HandleAppError(ex)
        End Try
        Return False
    End Function
End Class
