Imports IntraSell_DLL
Imports IntraSell_EF
Imports IntraSell_Net_Base

Public Class VorgangEasy
    Dim Context As New IntraSellContext(CurrentDB.ConnectionString)
    Property Vorgang As IntraSell_EF.Vorgang

    Private Sub VorgangEasy_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        CombosInitalisieren()
        FillComboBox(TypComboBox, "SELECT '' as Typ, '' as Bezeichnung union SELECT Typ, Bezeichnung FROM buchVorgangTyp ORDER By Bezeichnung", "Bezeichnung", "Typ")
        ControlsUpdaten()
    End Sub

    Private Sub CombosInitalisieren()
        FillComboBox(TextBoxZahlungsmethode, "SELECT distinct methode FROM grzahlungsmethode ORDER By methode", "methode", "methode")
        FillComboBox(TextBoxZahlungsbedingung, "SELECT distinct methode FROM grzahlungsbedingung ORDER By methode", "methode", "methode")
        FillComboBox(TextBoxTransportmethode, "SELECT distinct methode FROM grtransportmethode ORDER By methode", "methode", "methode")
    End Sub

    Private Sub BindingNavigatorSaveItem_Click(sender As Object, e As EventArgs) Handles MyBase.Save
        Try
            DatenSpeichern()
        Catch ex As Exception
            If ex.InnerException IsNot Nothing Then
                HandleAppError(ex.InnerException)
            Else
                HandleAppError(ex)
            End If
        End Try
    End Sub

    Private Sub UcVorgangFunktionen1_Aktion(name As VorgangAktionenEnum) Handles UcVorgangFunktionen1.Aktion
        If Vorgang IsNot Nothing Then
            LadeAbstractDaten()
        End If
        If name = VorgangAktionenEnum.NEU Then
            StarteNeuerVorgang()
        ElseIf name = VorgangAktionenEnum.DRUCK Then
            Print(Nothing)
        ElseIf name = VorgangAktionenEnum.ABSCHLIESSEN Then
            VorgangAbschliessenMitEvent()
        ElseIf name = VorgangAktionenEnum.BEZAHLT Then
            SetBezahlt(GetVorgang.Typ, GetVorgang.Nummer)
            LadeVorgangNummer(GetVorgang.Typ, GetVorgang.Nummer, raiseEventVorgangGeladen:=False)
        ElseIf name = VorgangAktionenEnum.KONVERTIEREN Then
            VorgangKonvertieren()
        ElseIf name = VorgangAktionenEnum.STORNO Then
            VorgangStornoMitEvent()
        ElseIf name = VorgangAktionenEnum.EXPORT Then
            HTMLPrint()
        ElseIf name = VorgangAktionenEnum.PDF Then
            HTMLPrint_PDF_Mail()
        ElseIf name = VorgangAktionenEnum.EMAIL Then
            HTMLPrint_PDF_Mailform()
        ElseIf name = VorgangAktionenEnum.VORLAGE Then
            DruckVorlage()
        ElseIf name = VorgangAktionenEnum.VORLAGE Then
            DruckVorlage()
        ElseIf name = VorgangAktionenEnum.BERECHNEN Then
            VorgangNeuBerechnen()
            DatenAnUI()
        End If
        If Vorgang IsNot Nothing Then
            ControlsUpdaten()
        End If
    End Sub

    Public Sub LadeVorgang(Typ As String, Nummer As Integer, Optional raiseEventVorgangGeladen As Boolean = True)
        Vorgang = Context.LadeVorgang(Typ, Nummer)
        LadeVorgangNummer(Typ, Nummer)
        FirmaAdresse1.LadeDaten()
        DatenAnUI()
        ControlsUpdaten()
    End Sub

    Private Sub LadeAbstractDaten()
        LadeVorgangNummer(Vorgang.Typ, Vorgang.Nummer)
    End Sub

    Private Sub StarteNeuerVorgang()
        Try
            If TypComboBox.SelectedValue Is Nothing Then
                MessageBox.Show("Vorgang Typ zuerst auswählen!", "Vorgang Typ!")
                Exit Sub
            End If
            TextBoxVorgangNummer.Text = intrasell.vorgang.GetNewVorgangNummer(TypComboBox.SelectedValue, -1)
            Vorgang = New IntraSell_EF.Vorgang()
            Vorgang.Typ = TypComboBox.SelectedValue
            Vorgang.Nummer = TextBoxVorgangNummer.Text

            Context.Vorgaenge.Add(Vorgang)

            FirmaAdresse1.LadeDaten()
            DatenAnUI()
            ControlsUpdaten()
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    Private Sub DatumDateTimePicker_Validated(sender As Object, e As EventArgs) Handles DatumDateTimePicker.Validated
        Vorgang.Datum = DatumDateTimePicker.Value
    End Sub

    Private Sub TextBoxZahlungsmethode_Validated(sender As Object, e As EventArgs) Handles TextBoxZahlungsmethode.Validated
        Vorgang.ZahlungsMethode = TextBoxZahlungsmethode.Text
        DatenGeaendert()
    End Sub

    Private Sub TextBoxZahlungsbedingung_Validated(sender As Object, e As EventArgs) Handles TextBoxZahlungsbedingung.Validated
        Vorgang.ZahlungsBedingung = TextBoxZahlungsbedingung.Text
        DatenGeaendert()
    End Sub

    Private Sub TextBoxTransportmethode_Validated(sender As Object, e As EventArgs) Handles TextBoxTransportmethode.Validated
        Vorgang.TransportMethode = TextBoxTransportmethode.Text
        DatenGeaendert()
    End Sub

    Sub ControlsUpdaten()

        TabPageKunde.Enabled = Vorgang IsNot Nothing
        TabPagePositionen.Enabled = Vorgang IsNot Nothing
        TabPageBedingungen.Enabled = Vorgang IsNot Nothing

        Me.DatumDateTimePicker.Enabled = Vorgang IsNot Nothing
        FirmaAdresse1.Enabled = Vorgang IsNot Nothing
        AdressenDetailControlQuick1.Enabled = Vorgang IsNot Nothing

        UcVorgangFunktionen1.btnStorno.Enabled = Vorgang IsNot Nothing
        UcVorgangFunktionen1.btnKonvertieren.Enabled = Vorgang IsNot Nothing
        UcVorgangFunktionen1.ButtonBezahlt.Enabled = Vorgang IsNot Nothing
        UcVorgangFunktionen1.btnAbschliessen.Enabled = Vorgang IsNot Nothing
        UcVorgangFunktionen1.btnAusdruck.Enabled = Vorgang IsNot Nothing
        UcVorgangFunktionen1.btnPDF.Enabled = Vorgang IsNot Nothing
    End Sub

    Sub DatenAnUI()
        Try
            Me.DataGridViewPositionen.AutoGenerateColumns = False
            Me.DataGridViewPositionen.DataSource = Nothing
            Me.DataGridViewPositionen.DataSource = Vorgang.Positionen

            Me.TextBoxVorgangNummer.Text = Vorgang.Nummer
            Me.TypComboBox.SelectedValue = Vorgang.Typ
            Me.TextBoxZahlungsbedingung.Text = Vorgang.ZahlungsBedingung
            Me.TextBoxZahlungsmethode.Text = Vorgang.ZahlungsMethode
            Me.TextBoxTransportmethode.Text = Vorgang.TransportMethode
            Me.DatumDateTimePicker.Value = Vorgang.Datum
            Me.AbgeschlossenCheckBox.Checked = Vorgang.Abgeschlossen
            Me.AusgedrucktCheckBox.Checked = Vorgang.Ausgedruckt
            Me.BezahltCheckBox.Checked = Vorgang.Bezahlt
            If Vorgang.Summe IsNot Nothing Then
                Me.TextBoxNetto.Text = Vorgang.Summe.Value.ToString("C2")
            End If
            If Vorgang.SummeMWST IsNot Nothing Then
                Me.TextBoxMWST.Text = Vorgang.SummeMWST.Value.ToString("C2")
            End If
            If Vorgang.SummeBrutto IsNot Nothing Then
                Me.TextBoxBrutto.Text = Vorgang.SummeBrutto.Value.ToString("C2")
            End If

            If Not Vorgang.Kunde Is Nothing Then
                AdressenDetailControlQuick1.IDNR = Vorgang.KundNr
                AdressenDetailControlQuick1.NameFamilie = Vorgang.Kunde.Name
                AdressenDetailControlQuick1.Vorname = Vorgang.Kunde.Vorname
                AdressenDetailControlQuick1.PLZ = Vorgang.Kunde.PLZ
                AdressenDetailControlQuick1.Ort = Vorgang.Kunde.Ort
                AdressenDetailControlQuick1.Adresse = Vorgang.Kunde.Adresse
                AdressenDetailControlQuick1.Tel = Vorgang.Kunde.Tel
                AdressenDetailControlQuick1.Mobil = Vorgang.Kunde.Mobil
            End If

            'Me.DataGridView1.Refresh()
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    Sub DatenGeaendert()
        BindingNavigatorSaveItem.Enabled = True
    End Sub

    Sub DatenSpeichern()
        If Vorgang.KundNr = 0 Then
            MessageBox.Show("Kunde fehlt! Bitte Kunden auswählen oder eintragen!", "Kunde fehlt!")
            Exit Sub
        End If
        Context.SaveChanges()
    End Sub

    Private Sub TypComboBox_Validated(sender As Object, e As EventArgs) Handles TypComboBox.Validated
        Try
            If Vorgang Is Nothing Then
                StarteNeuerVorgang()
            End If
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    Private Sub VorgangKonvertieren()
        Try
            SaveEdits()
            Dim VorgangKonvertieren As New VorgangKonvertieren
            VorgangKonvertieren.Init(Vorgang.Typ, Vorgang.Nummer, Vorgang.KundNr)
            'RaiseEvent VorgangKonvertierenPressed(VorgangKonvertieren)
            VorgangKonvertieren.ShowDialog()
            If VorgangKonvertieren.DialogResult = Windows.Forms.DialogResult.OK Then
                'Close()
                Dim konvertiertNach_vorgangForm = VorgangKonvertieren.konvertiertNach_vorgangForm
                If konvertiertNach_vorgangForm IsNot Nothing Then
                    'konvertiertNach_vorgangForm.BringToFront()
                    Dim konvertierterVorgang = konvertiertNach_vorgangForm.GetVorgang
                    konvertiertNach_vorgangForm.Close()
                    LadeVorgang(konvertierterVorgang.Typ, konvertierterVorgang.Nummer, False)
                End If
            End If
            VorgangKonvertieren.Dispose()

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

#Region "Kunden"
    Private Sub AdressenControl1_IDNRChanged(IDNR As Integer) Handles AdressenControl1.IDNRChanged
        Try
            Me.Vorgang.KundNr = IDNR
            Me.AdressenDetailControlQuick1.IDNR = IDNR
            Vorgang.Kunde = Context.Adressen.Find(IDNR)
            DatenAnUI()
            DatenGeaendert()
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    Private Sub KundenDatenGeaendert(sender As Object, e As EventArgs) Handles AdressenDetailControlQuick1.Validated
        Try
            Me.Vorgang.Kunde.Name = AdressenDetailControlQuick1.NameFamilie
            Me.Vorgang.Kunde.Vorname = AdressenDetailControlQuick1.Vorname
            Me.Vorgang.Kunde.Firma = AdressenDetailControlQuick1.Firma
            Me.Vorgang.Kunde.PLZ = AdressenDetailControlQuick1.PLZ
            Me.Vorgang.Kunde.Ort = AdressenDetailControlQuick1.Ort
            Me.Vorgang.Kunde.Adresse = AdressenDetailControlQuick1.Adresse
            Me.Vorgang.Kunde.Tel = AdressenDetailControlQuick1.Tel
            Me.Vorgang.Kunde.Mobil = AdressenDetailControlQuick1.Mobil
            Me.Vorgang.Kunde.Email = AdressenDetailControlQuick1.Email
            DatenGeaendert()
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    Private Sub ButtonKundeNeu_Click(sender As Object, e As EventArgs) Handles ButtonKundeNeu.Click
        Try
            Dim kunde = New IntraSell_EF.Adresse
            Context.Adressen.Add(kunde)
            kunde.Idnr = NextId("ofAdressen", "IDNR")
            Vorgang.KundNr = kunde.Idnr
            Vorgang.Kunde = kunde
            DatenAnUI()
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

#End Region

#Region "Positionen"

    Private Sub DataGridView1_CellContentClick(sender As System.Object, e As DataGridViewCellEventArgs) _
                                            Handles DataGridViewPositionen.CellContentClick
        Dim senderGrid = DirectCast(sender, DataGridView)

        If TypeOf senderGrid.Columns(e.ColumnIndex) Is DataGridViewButtonColumn AndAlso e.RowIndex >= 0 Then
            Dim posToDelete = DataGridViewPositionen.Rows(e.RowIndex).DataBoundItem
            Vorgang.Positionen.Remove(posToDelete)
            VorgangNeuBerechnen()
            DatenAnUI()
        End If

    End Sub
    Private Sub ArtikelControl1_ArtNrChanged(ArtNr As Integer) Handles ArtikelControl1.ArtNrChanged
        Try
            Dim artikel = Context.Artikeln.Find(ArtNr)
            TextBoxMenge.Text = "1"
            TextBoxPreis.Text = artikel.PreisBrutto
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    Private Sub ButtonPositionEinfuegen_Click(sender As Object, e As EventArgs) Handles ButtonPositionEinfuegen.Click
        Try
            Dim item As New IntraSell_EF.VorgangArtikel
            Dim artikel = Context.Artikeln.Find(Me.ArtikelControl1.ArtNr)

            item.ArtNr = Me.ArtikelControl1.ArtNr
            item.Bezeichnung = Me.ArtikelControl1.ArtikelComboBox.Text
            item.Preis_Brutto = TextBoxPreis.Text
            item.Preis_Netto = Math.Round(item.Preis_Brutto * 100 / (100 + artikel.MWST), 4)
            item.MWST = item.Preis_Brutto - item.Preis_Netto
            item.MWSTSatz = artikel.MWST
            item.Stk = TextBoxMenge.Text
            If Vorgang.Positionen Is Nothing Then
                Vorgang.Positionen = New List(Of VorgangArtikel)
            End If
            item.Id = Vorgang.Positionen.Count + 1
            Vorgang.Positionen.Add(item)
            VorgangNeuBerechnen()

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

    Private Sub VorgangNeuBerechnen()
        Vorgang.SummeBrutto = 0
        Vorgang.SummeMWST = 0
        Vorgang.Summe = 0

        For Each pos In Vorgang.Positionen
            Vorgang.SummeBrutto += pos.Stk * pos.Preis_Brutto
            Vorgang.Summe += Math.Round(pos.Stk * pos.Preis_Netto, 2)
            Vorgang.SummeMWST = Vorgang.SummeBrutto - Vorgang.Summe
        Next
    End Sub


#End Region

End Class
