Imports IntraSell_DLL
Imports IntraSell_Net_Base

Public Class VorgangStat
    Inherits VorgangListe
    Implements InterfaceExportableGrid

    Const COL_JAHR_INDEX = 0
    Const COL_MONAT_INDEX = 1
    Const COL_KUNDNR_INDEX = 2
    Const COL_KUNDE_INDEX = 3
    Const COL_VORGANGTYP_INDEX = 4
    Const COL_VORGANGNUMMER_INDEX = 5
    Const COL_DATUM_INDEX = 6
    Const COL_EAN_INDEX = 7

    Const col_stk_index As Integer = 12
    Const col_einsatz_index As Integer = 13
    Const col_netto_index As Integer = 14
    Const col_brutto_index As Integer = 15
    Const col_mwst_index As Integer = 16

    Public Overloads Sub Export(sender As Object) Implements InterfaceExportableGrid.Export
        FunctionsDataGrid.ExportDGToCSV(BuchVorgangArtikelVerkaufDataGridView)
    End Sub

    Private Sub VorgangStat_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Try
            If Not HasRecht(MitarbeiterID, Rechte.Vorgangliste, False) Then
                Exit Sub
            End If

            LadeFormDaten()
            VorgangListeDataGridView.Visible = False
            'Me.ButtonOeffne.Visible = False
            BuchVorgangArtikelVerkaufDataGridView.Dock = DockStyle.Fill
            LoadData()

            CheckBoxPOSFormat.Checked = VarValue_Default(Variablen.KASSA_REPORTS_FORMAT_POS, True)

            ArtikelKategorieComboBox.Enabled = True
            ArtikelControl1.Enabled = True
            UpdateLayout()

            Me.MainMenuStrip.Items.AddRange(Me.MenuStripAuswertungen.Items)
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    Sub UpdateLayout()
        Dim zeige As Boolean = VarValue_Default("VORGANG_STATISTIK_ZEIGE_PANEL_REPORTS", "True")
        ZeigePanelBerichteToolStripMenuItem.Checked = zeige
        TableLayout_Reports.Visible = zeige
    End Sub

    Shadows Sub LoadData()
        Try
            Cursor = Cursors.WaitCursor
            BuchVorgangArtikelVerkaufTableAdapter.Connection.ConnectionString = My.Settings.intrasell_daten_2_ConnectionString
            If Not IstVorgangTyp(TypComboBox.SelectedValue) Then
                TypComboBox.SelectedValue = VorgangTypen.AR
            End If
            BuchVorgangArtikelVerkaufTableAdapter.Fill(DsVorgaenge1.buchVorgangArtikelVerkauf, DatumVon.Value, DatumUntil.Value, TypComboBox.SelectedValue) 'TODO - nach typ
        Catch ex As Exception
            HandleAppError(ex)
        Finally
            Cursor = Cursors.Default
        End Try
    End Sub

    Protected Shadows Sub ApplyFilter(filter As String) Handles MyBase.FilterChanged
        If filter IsNot Nothing Then
            LoadData()
            If ArtikelControl1.ArtNr > 0 Then
                filter = filter & " and ArtNr = " & ArtikelControl1.ArtNr
            End If
            BuchVorgangArtikelVerkaufBindingSource.Filter = filter
        Else
            BuchVorgangArtikelVerkaufBindingSource.Filter = Nothing
        End If
    End Sub

    ''' <summary>
    ''' Einfärben
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub BuchVorgangArtikelVerkaufDataGridView_CellFormatting(sender As Object, e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) _
        Handles BuchVorgangArtikelVerkaufDataGridView.CellFormatting
        Try
            Dim dr = BuchVorgangArtikelVerkaufDataGridView.Rows(e.RowIndex)
            Dim VorgangVerkauf = BuchVorgangArtikelVerkaufDataGridView.Rows(e.RowIndex).DataBoundItem.row

            If e.ColumnIndex = COL_EAN_INDEX Then
                dr.Cells(COL_EAN_INDEX).Style.ForeColor = Color.Blue
            End If

            If e.ColumnIndex = COL_KUNDNR_INDEX Then
                dr.Cells(COL_KUNDNR_INDEX).Style.ForeColor = Color.Blue
            End If

            If e.ColumnIndex = COL_VORGANGNUMMER_INDEX Then
                dr.Cells(COL_VORGANGNUMMER_INDEX).Style.ForeColor = Color.Blue
            End If

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

    End Sub

    Private Sub BuchVorgangArtikelVerkaufDataGridView_CellContentDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles BuchVorgangArtikelVerkaufDataGridView.CellContentDoubleClick
        Try
            If e.ColumnIndex = COL_EAN_INDEX Then
                Dim EAN = BuchVorgangArtikelVerkaufDataGridView.Item(e.ColumnIndex, e.RowIndex).Value
                OffneArtikelMaskeByFilter("EAN='" + EAN + "'")
            End If

            If e.ColumnIndex = COL_KUNDNR_INDEX Then
                Dim KundNr = BuchVorgangArtikelVerkaufDataGridView.Item(e.ColumnIndex, e.RowIndex).Value
                OeffneKundenMaske(KundNr, True)
            End If

            If e.ColumnIndex = COL_VORGANGNUMMER_INDEX Then
                Dim Typ = BuchVorgangArtikelVerkaufDataGridView.Item(COL_VORGANGTYP_INDEX, e.RowIndex).Value
                Dim Nummer = BuchVorgangArtikelVerkaufDataGridView.Item(COL_VORGANGNUMMER_INDEX, e.RowIndex).Value
                OeffneVorgangByNummer(Typ, Nummer, True)
            End If

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

    Private Sub BuchVorgangArtikelVerkaufDataGridView_DataBindingComplete(sender As Object, e As DataGridViewBindingCompleteEventArgs) Handles BuchVorgangArtikelVerkaufDataGridView.DataBindingComplete
        If VorgangListeDataGridView.Rows.Count < 0 Then Return

        Dim total_netto, total_brutto As Decimal
        total_netto = 0
        total_brutto = 0
        Dim total_stk = 0
        For Each dr In BuchVorgangArtikelVerkaufDataGridView.Rows
            'For Each dr As DataGridViewRow In VorgangListeDataGridView.Rows
            Dim cell_stk = dr.Cells(col_stk_index).Value
            Dim cell_netto = dr.Cells(col_netto_index).Value
            Dim cell_brutto = dr.Cells(col_brutto_index).Value
            Dim cell3 = dr.Cells(col_mwst_index).Value

            If IsNumeric(cell_netto) Then
                total_netto += cell_netto
            End If
            If IsNumeric(cell_brutto) Then
                total_brutto += cell_brutto
            End If

            If IsNumeric(cell_stk) Then
                total_stk += cell_stk
            End If
        Next
        If IsNumeric(total_brutto) And IsNumeric(total_netto) Then
            txtTotal_Brutto.Text = FormatCurrency(total_brutto)
            txtTotal_Netto.Text = FormatCurrency(total_netto)
            txtTotal_MWST.Text = FormatCurrency(total_brutto - total_netto)
        End If

        If IsNumeric(total_stk) Then
            txtTotal_Stk.Text = total_stk
        End If
    End Sub

    Private Sub btnReport_Click(sender As Object, e As EventArgs) Handles btnReport.Click
        RunVorgangStatistik(basisMonatlich:=False)
    End Sub

    Sub RunVorgangStatistik(basisMonatlich As Boolean)
        If CheckBoxPOSFormat.Checked Then
            ModuleReports.ShowVerkaufsstatistik(DatumVon.Value, DatumUntil.Value, filter, "ReportVorgangStatistikPOS.rdlc", basisMonatlich, TypComboBox.SelectedValue)
        Else
            ModuleReports.ShowVerkaufsstatistik(DatumVon.Value, DatumUntil.Value, filter, "ReportVorgangStatistik.rdlc", basisMonatlich, TypComboBox.SelectedValue)
        End If
    End Sub

    Private Sub ButtonReportMitarbeiter_Click(sender As Object, e As EventArgs) Handles ButtonReportMitarbeiter.Click
        If CheckBoxPOSFormat.Checked Then
            ModuleReports.ShowVerkaufsstatistik(DatumVon.Value, DatumUntil.Value, filter, "ReportUmsatzMitarbeiterPOS.rdlc", vorgangTyp:=TypComboBox.SelectedValue)
        Else
            ModuleReports.ShowVerkaufsstatistik(DatumVon.Value, DatumUntil.Value, filter, "ReportUmsatzMitarbeiter.rdlc", vorgangTyp:=TypComboBox.SelectedValue)
        End If
    End Sub

    Private Sub ButtonReportBrutto_Click(sender As Object, e As EventArgs) Handles ButtonReportBrutto.Click
        Dim Monatlich = (DatumUntil.Value - DatumVon.Value).Days >= 28
        ReportVorgangStatistik(Monatlich)
    End Sub

    Public Sub ReportVorgangStatistik(Monatlich As Boolean)
        FilterButton.PerformClick()
        If CheckBoxPOSFormat.Checked Then
            ModuleReports.ShowVerkaufsstatistik(DatumVon.Value, DatumUntil.Value, filter, "ReportVorgangStatistikMWSTBruttoPOS.rdlc", basisMonatlich:=Monatlich, vorgangTyp:=TypComboBox.SelectedValue)
        Else
            ModuleReports.ShowVerkaufsstatistik(DatumVon.Value, DatumUntil.Value, filter, "ReportVorgangStatistik.rdlc", basisMonatlich:=Monatlich, vorgangTyp:=TypComboBox.SelectedValue)
        End If
    End Sub

    Public Sub MWSTStatistik()
        Me.TypComboBox.SelectedValue = VorgangTypen.AR
        Dim Monatlich = (DatumUntil.Value - DatumVon.Value).Days >= 28
        ReportVorgangStatistik(Monatlich)
    End Sub

    Public Sub MWSTStatistik(datumvon As Date, datumbis As Date)
        Me.TypComboBox.SelectedValue = VorgangTypen.AR
        Me.DatumVon.Value = datumvon
        Me.DatumUntil.Value = datumbis
        Dim Monatlich = (datumbis - datumvon).Days >= 28
        ReportVorgangStatistik(Monatlich)
    End Sub

    Public Sub Charts()
        ButtonCharts_Click(Nothing, Nothing)
    End Sub

    Public Sub MWSTStatistikMonat()
        Try
            Me.TypComboBox.SelectedValue = VorgangTypen.AR
            SetLastMonth(DatumVon, DatumUntil)
            MitarbeiterComboBox.IDNR = Nothing
            ReportVorgangStatistik(Monatlich:=True)
        Catch ex As Exception
            HandleAppError(ex, Silent:=True)
        End Try
    End Sub

    Private Sub CheckBoxPOSFormat_Click(sender As Object, e As EventArgs) Handles CheckBoxPOSFormat.Click
        SetVarValue(Variablen.KASSA_REPORTS_FORMAT_POS, CheckBoxPOSFormat.Checked)
    End Sub

    Private Sub MonatlichToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles MonatlichToolStripMenuItem.Click
        RunVorgangStatistik(basisMonatlich:=True)
    End Sub

    Private Sub TäglichArtikelverkaufToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles TäglichArtikelverkaufToolStripMenuItem.Click
        RunVorgangStatistik(basisMonatlich:=False)
    End Sub

    Private Sub UmsatzMitarbeiterToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles UmsatzMitarbeiterToolStripMenuItem.Click
        ButtonReportMitarbeiter_Click(Nothing, Nothing)
    End Sub

    Private Sub UmsatzMitMWSTToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles UmsatzMitMWSTToolStripMenuItem.Click
        ButtonReportBrutto_Click(Nothing, Nothing)
    End Sub

    Private Sub MaterialverbrauchToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles MaterialverbrauchToolStripMenuItem.Click
        SetVarValue("REPORT_MATERIAL_VERBRAUCH_TABELLE", "Vorgang")
        ModuleReports.ShowReportVorgangSubartikelVerbrauch(DatumVon.Value, DatumUntil.Value, filter, "ReportVorgangSubartikelVerbrauch.rdlc")
    End Sub

    Private Sub MaterialverbrauchBasisRechnungstabelleToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles MaterialverbrauchBasisRechnungstabelleToolStripMenuItem.Click
        SetVarValue("REPORT_MATERIAL_VERBRAUCH_TABELLE", "Rechnung")
        ModuleReports.ShowReportVorgangSubartikelVerbrauch(DatumVon.Value, DatumUntil.Value, filter, "ReportVorgangSubartikelVerbrauch.rdlc")
    End Sub

    Private Sub StatistikAUSTRIAToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles StatistikAUSTRIAToolStripMenuItem.Click
        ModuleReports.ShowReportStatistikAustria(DatumVon.Value, DatumUntil.Value, filter)
    End Sub

    Private Sub StatistikAUSTRIADatenexportToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles StatistikAUSTRIADatenexportToolStripMenuItem.Click
        Try
            StatistikAustriaDatenExport.MdiParent = Main
            StatistikAustriaDatenExport.Show()
            StatistikAustriaDatenExport.LadeDaten(DatumVon.Value, DatumUntil.Value, typ:=Me.TypComboBox.SelectedValue, abgeschlossen:=Me.AbgeschlossenCheckBox.Checked, filter)
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    Private Sub ChartsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ChartsToolStripMenuItem.Click
        ModuleReports.ShowVerkaufsstatistik(DatumVon.Value, DatumUntil.Value, filter, "ReportVorgangStatistikCharts.rdlc", vorgangTyp:=TypComboBox.SelectedValue)
    End Sub

    Private Sub ButtonCharts_Click(sender As Object, e As EventArgs) Handles ButtonCharts.Click
        ChartsToolStripMenuItem_Click(sender, e)
    End Sub


    Private Sub EigenverbrauchToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles EigenverbrauchToolStripMenuItem.Click
        ReportAusschuss("Eigenverbrauch")
    End Sub

    Private Sub SchwundToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SchwundToolStripMenuItem.Click
        ReportAusschuss("Einladen")
    End Sub

    Private Sub KaputtToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles KaputtToolStripMenuItem.Click
        ReportAusschuss("Kaputt")
    End Sub

    Private Sub AbgesagtToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AbgesagtToolStripMenuItem.Click
        ReportAusschuss("Abgesagt")
    End Sub

    Private Sub VerbrantToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles VerbrantToolStripMenuItem.Click
        ReportAusschuss("Verbrant")
    End Sub

    Private Sub GratisToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles GratisToolStripMenuItem.Click
        ReportAusschuss("Gratis")
    End Sub

    Private Sub ReportAusschuss(Grund As String)
        NotizTextBox.Text = Grund
        FilterButton_Click(Nothing, Nothing)
        RunVorgangStatistik(basisMonatlich:=False)
    End Sub

    Private Sub ToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItemUmsatzArtikel.Click
        ModuleReports.ShowVerkaufsstatistik(DatumVon.Value, DatumUntil.Value, filter, "ReportUmsatzArtikel.rdlc", vorgangTyp:=TypComboBox.SelectedValue)
    End Sub

    Private Sub ToolStripMenuItem2_Click(sender As Object, e As EventArgs) Handles UmsatzArtikelToolStripMenuItem.Click
        ModuleReports.ShowVerkaufsstatistik(DatumVon.Value, DatumUntil.Value, filter, "ReportUmsatzArtikelBezeichnung.rdlc", vorgangTyp:=TypComboBox.SelectedValue)
    End Sub

    Private Sub UmsatzArtikelMitLagerbestandToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles UmsatzArtikelMitLagerbestandToolStripMenuItem.Click
        ModuleReports.ShowVerkaufsstatistik(DatumVon.Value, DatumUntil.Value, filter, "ReportUmsatzArtikelMitLagerbestand.rdlc", vorgangTyp:=TypComboBox.SelectedValue)
    End Sub

    Private Sub ToolStripMenuItemUmsatzKunde_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItemUmsatzKunde.Click
        ModuleReports.ShowVerkaufsstatistik(DatumVon.Value, DatumUntil.Value, filter, "ReportUmsatzKunde.rdlc", vorgangTyp:=TypComboBox.SelectedValue)
    End Sub

    Private Sub ZeigePanelBerichteToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ZeigePanelBerichteToolStripMenuItem.Click
        Try
            Dim c As Boolean = Not ZeigePanelBerichteToolStripMenuItem.Checked
            SetVarValue("VORGANG_STATISTIK_ZEIGE_PANEL_REPORTS", c)
            UpdateLayout()
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    Private Sub MWSTToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles MWSTToolStripMenuItem.Click
        If CheckBoxPOSFormat.Checked Then
            ModuleReports.ShowReport(DatumVon.Value, DatumUntil.Value, reportName:="ReportMWSTPOS.rdlc", reportMethod:="ShowReport_MWST")
        Else
            ModuleReports.ShowReport(DatumVon.Value, DatumUntil.Value, reportName:="ReportMWST.rdlc", reportMethod:="ShowReport_MWST")
        End If
    End Sub

    Private Sub AutomatischeAuswertungenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AutomatischeAuswertungenToolStripMenuItem.Click
        Try
            AutomAufgabenEinstellungen.Show()
            AutomAufgabenEinstellungen.BringToFront()
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

End Class