' Copyright (C) 2025  P4pillon.org
'
' This program is free software: you can redistribute it and/or modify
' it under the terms of the GNU Affero General Public License as
' published by the Free Software Foundation, either version 3 of the
' License, or (at your option) any later version.
'
' This program is distributed in the hope that it will be useful,
' but WITHOUT ANY WARRANTY; without even the implied warranty of
' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
' GNU Affero General Public License for more details.
'
' You should have received a copy of the GNU Affero General Public License
' along with this program.  If not, see <https://www.gnu.org/licenses/>.
Public Class SuiviTraitementList
    Private Tri_Date As Boolean
    Public à_commander As Boolean

    Public Tri_Patient As String
    Public Tri_Produit As String
    Public Tri_Patient_période As Integer
    Public Tri_Produit_période As Integer
    Public Fin_de_Vente As Boolean
    Public Organisme As String
    Public form_shown As Boolean
    Private Color_tab() As color_struct

    Private Structure color_struct
        Dim Font_color As Color
        Dim Back_color As Color
    End Structure

    Private Structure Commande
        Dim fournisseur As String
        Dim lignes As List(Of Integer)
    End Structure

    Private Sub SuiviTraitementList_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
        MENU_PRINCIPAL.Affiche_info_chronique()
        VenteForm.WindowState = FormWindowState.Maximized
    End Sub



    Private Sub ChroniqueDataGridView_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles ChroniqueDataGridView.CellClick
        If e.RowIndex < 0 Then Exit Sub
        If e.ColumnIndex < 0 Then
            Exit Sub
        ElseIf e.ColumnIndex = suppr.Index Then
            ChroniqueDataGridView.Rows.RemoveAt(e.RowIndex)

        ElseIf e.ColumnIndex = Patient.Index Then
            Try

                COMPTOIR_MAIN.chargement_patient_VitaleNum(ChroniqueDataGridView.Item(Vitale_Num.Index, e.RowIndex).Value)
                If COMPTOIR_MAIN.Détail_Bénéficiaire_Panel.Visible = False Then
                    COMPTOIR_MAIN.Détail_Bénéficiaire_Panel.Visible = True
                    COMPTOIR_MAIN.Détail_Bénéficiaire_Panel.BringToFront()
                    COMPTOIR_MAIN.Dossier_Patient_LinkLabel.Text = "Fermer Dossier patient"
                    COMPTOIR_MAIN.Dossier_Patient_TabControl.SelectedTab = COMPTOIR_MAIN.Dossier_Patient_Chronique
                End If
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        Else
            Dim My_Chronique_Ligne As New Chronique_Ligne
            Dim datas = BDD.ChroniqueTableAdapter.GetDataBy_Datas(ChroniqueDataGridView(Vitale_Num.Index, e.RowIndex).Value, ChroniqueDataGridView(Produit_Désignation.Index, e.RowIndex).Value, _
                                                                 ChroniqueDataGridView(Produit_CIP.Index, e.RowIndex).Value, ChroniqueDataGridView(Produit_EAN13.Index, e.RowIndex).Value, _
                                                                ChroniqueDataGridView(Produit_CAB.Index, e.RowIndex).Value)
            If datas.Rows.Count > 0 Then
                My_Chronique_Ligne.Chronique_item.load_from_row(datas(0))
            Else
                Exit Sub
            End If
            Me.TopMost = False
            My_Chronique_Ligne.TopMost = True
            My_Chronique_Ligne.ShowDialog()
            If Fin_de_Vente = True Then
                Me.TopMost = True
            End If
            affichage()
            'Me.ChroniqueTableAdapter.Fill(Me.PharmaDataSet.Chronique)
            If BDD.ChroniqueTableAdapter.GetData_Produit_à_commander(Tri_Produit_TextBox.Text, Tri_Patient, CDate(Now), à_commander, _
                                                                     CDate(DateTimePicker1.Value), Tri_Date, Organisme, 0, 0).Rows.Count > 0 Then
                SuiviTraitement_Commandes_Button.Visible = True
            Else
                SuiviTraitement_Commandes_Button.Visible = False
            End If
        End If
    End Sub


    Private Sub SuiviTraitement_Commandes_Button_Click(sender As Object, e As EventArgs) Handles SuiviTraitement_Commandes_Button.Click
        SuiviTraitement_Commandes_Button.Enabled = False
        Bandeau_info_bas_show("Préparation des commandes")
        Dim Commandes As New List(Of Commande)
        For r = 0 To ChroniqueDataGridView.RowCount - 1
            If ChroniqueDataGridView(Date_Commande_Produit.Index, r).Value <= Now And ChroniqueDataGridView(Commande_Ref.Index, r).Value = "" Then
                Dim fournisseur = ChroniqueDataGridView(Commande_Fournisseur.Index, r).Value
                Dim inserted = False
                For Each Commande As Commande In Commandes
                    If Commande.fournisseur = fournisseur Then
                        Commande.lignes.Add(r)
                        inserted = True
                    End If
                Next
                If inserted = False Then
                    Dim Commande As Commande
                    Commande.fournisseur = fournisseur
                    Commande.lignes = New List(Of Integer)
                    Commande.lignes.Add(r)
                    Commandes.Add(Commande)
                End If
            End If
        Next

        For Each Commande As Commande In Commandes




            Dim fournisseur_datas = BDD.FournisseurTableAdapter.GetDataBy_Nom(Commande.fournisseur)
            If fournisseur_datas.Rows.Count = 1 Then
                Dim statut_commande As String
                If fournisseur_datas.Item(0).URL = "" Then
                    statut_commande = "COMMANDE MANUELLE"
                Else
                    statut_commande = "A TRANSMETTRE"
                End If

                Dim ref_commande As Decimal
                Dim num_ligne As Integer
                If BDD.CommandesTableAdapter.GetDataBy_Fournisseur_Statut(Commande.fournisseur, statut_commande).Rows.Count > 0 Then
                    ref_commande = BDD.CommandesTableAdapter.GetDataBy_Fournisseur_Statut(Commande.fournisseur, statut_commande)(0).ref
                    If Commandes_PharmaML.Commandes_LignesTableAdapter.GetDataBy_ref_commande(ref_commande).Rows.Count > 0 Then
                        num_ligne = Commandes_PharmaML.Commandes_LignesTableAdapter.GetDataBy_ref_commande(ref_commande).Rows.Count - 1
                    Else
                        num_ligne = 0
                    End If
                Else
                    ref_commande = BDD.CommandesTableAdapter.Select_Max_ref + 1
                    BDD.CommandesTableAdapter.Insert(ref_commande, Commande.fournisseur, "", Format(Now, "yyyy-MM-dd"), statut_commande, "", "", "")
                    num_ligne = 0
                End If
                Try
                    My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\Pharma_ml\log__" & Format(Now, "yyyyMMdd") & ".txt", Chr(10) & Chr(10) & Now.ToString & Chr(10) & _
                                        "COMMANDE PRODUITS CHRONIQUES " & Commande.fournisseur & " " & ref_commande & " " & Chr(10), True)
                Catch ex As Exception
                End Try

                For Each ligne As Integer In Commande.lignes
                    Dim produit = BDD.ProduitsTableAdapter.GetDataBy_CIPandEAN13andCABandDesignation(ChroniqueDataGridView(Produit_CIP.Index, ligne).Value, ChroniqueDataGridView(Produit_EAN13.Index, ligne).Value, ChroniqueDataGridView(Produit_CAB.Index, ligne).Value, ChroniqueDataGridView(Produit_Désignation.Index, ligne).Value)
                    If produit.Rows.Count = 1 Then
                        num_ligne = num_ligne + 1
                        Dim quantité As Integer = CInt(ChroniqueDataGridView(Commande_Quantité.Index, ligne).Value)
                        If statut_commande = "A TRANSMETTRE" And (produit.Item(0).Code_PharmaML.Length = 13 Or produit.Item(0).Code_PharmaML.Length = 7) Then
                            If Commandes_PharmaML.Commandes_LignesTableAdapter.GetDataBy_ref_commande_Code_Produit(ref_commande, produit.Item(0).Code_PharmaML).Rows.Count > 0 Then
                                Commandes_PharmaML.Commandes_LignesTableAdapter.Add_quantité(quantité, ref_commande, produit.Item(0).Code_PharmaML)
                            Else
                                If produit.Item(0).Code_PharmaML.Length = 13 And IsNumeric(produit.Item(0).Code_PharmaML.ToString) Then
                                    Commandes_PharmaML.Commandes_LignesTableAdapter.Insert(ref_commande, num_ligne, "EAN13", produit.Item(0).Code_PharmaML, produit.Item(0).Designation, _
                                                                       quantité, "true", "false", "false", "", "", 0, "", 0, 0)
                                    COMPTOIR_MAIN.ProduitsTableAdapter.Update_en_commande(quantité, produit.Item(0).Code_PharmaML)

                                ElseIf produit.Item(0).Code_PharmaML.Length = 7 And IsNumeric(produit.Item(0).Code_PharmaML.ToString) Then
                                    Commandes_PharmaML.Commandes_LignesTableAdapter.Insert(ref_commande, num_ligne, "CIP39", produit.Item(0).Code_PharmaML, produit.Item(0).Designation, _
                                                                       quantité, "true", "false", "false", "", "", 0, "", 0, 0)
                                    COMPTOIR_MAIN.ProduitsTableAdapter.Update_en_commande(quantité, produit.Item(0).Code_PharmaML)
                                    'Else
                                    '    Commandes_PharmaML.Commandes_LignesTableAdapter.Insert(ref_commande, num_ligne, "CLAIR", produit.Item(0).Code_PharmaML, produit.Item(0).Designation, _
                                    '                                       quantité, "true", "false", "false", "", "", 0, "", 0, 0)
                                    '    COMPTOIR_MAIN.ProduitsTableAdapter.Update_en_commande(quantité, produit.Item(0).Designation)
                                End If
                            End If
                            BDD.ChroniqueTableAdapter.Update_Commande_Ref(ref_commande.ToString, num_ligne, ChroniqueDataGridView.Item(Vitale_Num.Index, ligne).Value, ChroniqueDataGridView.Item(Produit_Désignation.Index, ligne).Value, _
                                                                          ChroniqueDataGridView.Item(Produit_CIP.Index, ligne).Value, ChroniqueDataGridView.Item(Produit_EAN13.Index, ligne).Value, _
                                                                          ChroniqueDataGridView.Item(Produit_CAB.Index, ligne).Value)
                        ElseIf (statut_commande = "A TRANSMETTRE" And produit.Item(0).Code_PharmaML = "") Then
                            MyMsg_Box.Presentation("Officine !", produit.Item(0).Designation & vbCrLf & vbCrLf & "Pas de code pour Pharma-ML, le produit ne peut pas être commandé." & vbCrLf & vbCrLf & _
                                                   "Corrigez sur fiche produit.", False, "", False, "", True, "Ok")
                            MyMsg_Box.ShowDialog()
                        ElseIf (statut_commande = "A TRANSMETTRE" And produit.Item(0).Code_PharmaML <> "") Then
                            MyMsg_Box.Presentation("Officine !", produit.Item(0).Designation & vbCrLf & vbCrLf & "Longueur du code pour Pharma-ML invalide, le produit ne peut pas être commandé." & vbCrLf & vbCrLf & _
                                                   "Corrigez sur fiche produit.", False, "", False, "", True, "Ok")
                            MyMsg_Box.ShowDialog()
                        ElseIf statut_commande = "COMMANDE MANUELLE" Then
                            Dim code_prod As String
                            If produit.Item(0).CAB <> "" Then
                                code_prod = produit.Item(0).CAB
                            ElseIf produit.Item(0).EAN13 <> "" Then
                                code_prod = produit.Item(0).EAN13
                            Else
                                code_prod = produit.Item(0).CIP
                            End If

                            Commandes_PharmaML.Commandes_LignesTableAdapter.Insert(ref_commande, num_ligne, "", code_prod, produit.Item(0).Designation, _
                                                          quantité, "false", "false", "false", "", "", 0, 0, 0, 0)
                            COMPTOIR_MAIN.ProduitsTableAdapter.Update_en_commande(quantité, produit.Item(0).Designation)

                            Commandes_PharmaML.Produits_AchatsTableAdapter.Insert(code_prod, _
                                                                                  produit.Item(0).Designation, _
                                                                                 0, 0, 0, _
                                                                                 0, Now, "", ref_commande, num_ligne, 0)
                            BDD.ChroniqueTableAdapter.Update_Commande_Ref(ref_commande.ToString, num_ligne, ChroniqueDataGridView.Item(Vitale_Num.Index, ligne).Value, ChroniqueDataGridView.Item(Produit_Désignation.Index, ligne).Value, ChroniqueDataGridView.Item(Produit_CIP.Index, ligne).Value, ChroniqueDataGridView.Item(Produit_EAN13.Index, ligne).Value, ChroniqueDataGridView.Item(Produit_CAB.Index, ligne).Value)

                            Try
                                My.Computer.FileSystem.WriteAllText(Application.StartupPath & "\Pharma_ml\log__" & Format(Now, "yyyyMMdd") & ".txt", quantité.ToString & " " & code_prod & " " & produit.Item(0).Designation & Chr(10), True)
                            Catch ex As Exception
                            End Try
                        End If

                    Else
                        MyMsg_Box.Presentation("Officine !", "Anomalie pour produit:" & vbCrLf & vbCrLf & ChroniqueDataGridView(Produit_Désignation.Index, ligne).Value & vbCrLf & vbCrLf & "Le produit n'a pas été trouvé en base.", False, "", False, "", True, "OK")
                        MyMsg_Box.ShowDialog()
                    End If

                Next
            Else
                MyMsg_Box.Presentation("Officine !", "Anomalie pour fournisseur:" & vbCrLf & vbCrLf & Commande.fournisseur, False, "", False, "", True, "OK")
                MyMsg_Box.ShowDialog()

            End If


            'Me.ChroniqueTableAdapter.Fill(Me.PharmaDataSet.Chronique)
            Bandeau_info_bas_hide()
            SuiviTraitement_Commandes_Button.Enabled = True

            affichage()
            If BDD.ChroniqueTableAdapter.GetData_Produit_à_commander(Tri_Produit_TextBox.Text, Tri_Patient, CDate(Now), à_commander, _
                                                                 CDate(DateTimePicker1.Value), Tri_Date, Organisme, Tri_Patient_période, Tri_Produit_période).Rows.Count > 0 Then
                SuiviTraitement_Commandes_Button.Visible = True
            Else
                SuiviTraitement_Commandes_Button.Visible = False
            End If

        Next
    End Sub


    Private Sub OK_Button_Click(sender As Object, e As EventArgs) Handles OK_Button.Click
        If Fin_de_Vente = True Then
            Dim chroniques = BDD.ChroniqueTableAdapter.GetData_Patient(CurrentBenéficiaire.Num)
            For r = 0 To chroniques.Rows.Count - 1
                If chroniques(r).Commande_Produit = True Then
                    COMPTOIR_MAIN.ActesTableAdapter.Update_commander(False, CurrentFactureVitale.num, CurrentFactureVenteDirecte.NumVenteDirecte, chroniques(r).Produit_CIP, _
                                                                     chroniques(r).Produit_EAN13, chroniques(r).Produit_CAB, chroniques(r).Produit_Désignation)
                End If

            Next
        End If
        Me.Close()
    End Sub

    Private Sub SuiviTraitementList_Load(sender As Object, e As EventArgs) Handles Me.Load

        Période_Patient_MyCombobox.Items.Clear()
        Période_Patient_MyCombobox.Buttons_color_list = New List(Of String)
        Période_Produit_MyCombobox.Items.Clear()
        Période_Produit_MyCombobox.Buttons_color_list = New List(Of String)
        Modif_periode_MyCombobox.Items.Clear()
        Modif_periode_MyCombobox.Buttons_color_list = New List(Of String)
        Dim période = BDD.Chronique_PériodeTableAdapter.GetData
        ReDim Color_tab(période.Rows.Count)
        For r = 0 To période.Rows.Count - 1
            Période_Patient_MyCombobox.Items.Add(période.Item(r).Id)
            Période_Patient_MyCombobox.Buttons_color_list.Add(période.Item(r).Color_hex)
            Période_Produit_MyCombobox.Items.Add(période.Item(r).Id)
            Période_Produit_MyCombobox.Buttons_color_list.Add(période.Item(r).Color_hex)
            Modif_periode_MyCombobox.Items.Add(période.Item(r).Id)
            Modif_periode_MyCombobox.Buttons_color_list.Add(période.Item(r).Color_hex)
            Color_tab(r).Back_color = System.Drawing.ColorTranslator.FromHtml("#" & période.Item(r).Color_hex)
            Color_tab(r).Font_color = System.Drawing.Color.FromArgb((CInt(Color_tab(r).Back_color.R) + 128) Mod 256, (CInt(Color_tab(r).Back_color.G) + 128) Mod 256, (CInt(Color_tab(r).Back_color.B) + 128) Mod 256)
        Next

        Tri_Patient = ""
        Tri_Produit = ""
        Organismes_MyCombobox.Items.Clear()
        Dim organismes = BDD.OrganismesTableAdapter.GetData_OrderByNom
        For r = 0 To organismes.Rows.Count - 1
            Organismes_MyCombobox.Items.Add(organismes(r).Nom)
        Next
        If Fin_de_Vente = True Then
            Facturation_Button.Visible = False
            suppr.Visible = False
            Me.TopMost = True
            Me.BringToFront()
            Me.Select()
            Me.Activate()
        Else
            suppr.Visible = True
        End If

    End Sub



    Private Sub SuiviTraitementList_Shown(sender As Object, e As EventArgs) Handles Me.Shown
        form_shown = True
        replace_controls()
        affichage()
    End Sub


    Private Sub affichage()
        If form_shown = False Then Exit Sub
        Bandeau_info_bas_show("création liste ...")

        Try
            If Tri_Patient Is Nothing Then Tri_Patient = ""
            If Tri_Produit Is Nothing Then Tri_Produit = ""
            If Organisme Is Nothing Then Organisme = ""
            If Fin_de_Vente = False Then

           

                RadioButton1.Visible = True
                RadioButton2.Visible = True

                Dim data = BDD.ChroniqueTableAdapter.GetData_Produit_à_commander(Tri_Produit, Tri_Patient, CDate(Now), à_commander, _
                                                                 CDate(DateTimePicker1.Value), Tri_Date, Organisme, Tri_Patient_période, Tri_Produit_période)
                Me.ChroniqueBindingSource.DataSource = data

                'If BDD.ChroniqueTableAdapter.GetData_Produit_à_commander(Tri_Produit_TextBox.Text, Tri_Patient, CDate(Now), True, _
                '                                                     CDate(DateTimePicker1.Value), Tri_Date, Organisme, Tri_Patient_période, Tri_Produit_période).Rows.Count > 0 Then
                If data.Rows.Count > 0 Then
                    SuiviTraitement_Commandes_Button.Visible = True
                Else
                    SuiviTraitement_Commandes_Button.Visible = False
                End If
            Else
                Tri_Date = False
                à_commander = False
                Tri_GroupBox.Visible = False
                Dim datas = BDD.ChroniqueTableAdapter.GetData_Patient(CurrentBenéficiaire.Num)
                If datas.Rows.Count > 0 Then
                    Me.ChroniqueBindingSource.DataSource = datas
                Else
                    Me.Close()
                End If

            End If
            If ChroniqueDataGridView.Rows.Count > 0 Then
                For r = 0 To ChroniqueDataGridView.Rows.Count - 1
                    'Dim nom = BDD.VitaleTableAdapter.GetDataBy_Num(ChroniqueDataGridView.Item(Vitale_Num.Index, r).Value).Item(0)
                    'ChroniqueDataGridView.Item(Patient.Index, r).Value = nom.G104C1 & " " & nom.G104C3
                    If Not ChroniqueDataGridView(Période_ID.Index, r).Value Is Nothing Then
                        If ChroniqueDataGridView(Période_ID.Index, r).Value > 0 Then
                            ChroniqueDataGridView.Rows(r).Cells(Période_ID.Index).Style.BackColor = Color_tab(ChroniqueDataGridView(Période_ID.Index, r).Value).Back_color
                            ChroniqueDataGridView.Rows(r).Cells(Période_ID.Index).Style.ForeColor = Color_tab(ChroniqueDataGridView(Période_ID.Index, r).Value).Font_color
                        End If
                    End If


                Next
            End If
        Catch ex As Exception

            Bandeau_info_bas_hide()
        End Try
        compteur_lignes_Label.Text = ChroniqueDataGridView.RowCount.ToString

        Bandeau_info_bas_hide()
    End Sub

    Private Sub affichage_nom()
        Bandeau_info_bas_show("affichage nom patients ...")
        For r = 0 To ChroniqueDataGridView.Rows.Count - 1
            Bandeau_info_bas_change_text("affichage nom patients ... " & (r + 1).ToString & "/" & ChroniqueDataGridView.Rows.Count.ToString)
            Try
                If ChroniqueDataGridView.Item(Patient.Index, r).Value = "" Then
                    Dim num_vitale = ChroniqueDataGridView.Item(Vitale_Num.Index, r).Value
                    Dim vitale = BDD.VitaleTableAdapter.GetDataBy_Num(num_vitale).Item(0)
                    Dim nom = vitale.G104C1 & " " & vitale.G104C3
                    ChroniqueDataGridView.Item(Patient.Index, r).Value = nom
                    For rr = r + 1 To ChroniqueDataGridView.Rows.Count - 1
                        If ChroniqueDataGridView.Item(Patient.Index, rr).Value = "" Then
                            If ChroniqueDataGridView.Item(Vitale_Num.Index, rr).Value = num_vitale Then
                                ChroniqueDataGridView.Item(Patient.Index, rr).Value = nom
                            End If
                        End If
                    Next
                End If
            Catch ex As Exception
            End Try
        Next
        Bandeau_info_bas_hide()
    End Sub

    Private Sub affichage_Stock()
        Bandeau_info_bas_show("affichage stocks ...")
        For r = 0 To ChroniqueDataGridView.Rows.Count - 1
            Bandeau_info_bas_change_text("affichage stocks ... " & (r + 1).ToString & "/" & ChroniqueDataGridView.Rows.Count.ToString)
            Try
                If ChroniqueDataGridView.Item(Stock.Index, r).Value = "" Then
                    Dim cip = ChroniqueDataGridView.Item(Produit_CIP.Index, r).Value
                    Dim ean13 = ChroniqueDataGridView.Item(Produit_EAN13.Index, r).Value
                    Dim cab = ChroniqueDataGridView.Item(Produit_CAB.Index, r).Value
                    Dim designation = ChroniqueDataGridView.Item(Produit_Désignation.Index, r).Value
                    Dim stock_ = BDD.ProduitsTableAdapter.GetDataBy_CIPandEAN13andCABandDesignation(cip, ean13, cab, designation).Item(0).Stock
                    ChroniqueDataGridView.Item(Stock.Index, r).Value = stock_
                    For rr = r + 1 To ChroniqueDataGridView.Rows.Count - 1
                        If cip = ChroniqueDataGridView.Item(Produit_CIP.Index, rr).Value And ean13 = ChroniqueDataGridView.Item(Produit_EAN13.Index, rr).Value And _
                         cab = ChroniqueDataGridView.Item(Produit_CAB.Index, rr).Value And designation = ChroniqueDataGridView.Item(Produit_Désignation.Index, r).Value Then
                            ChroniqueDataGridView.Item(Stock.Index, rr).Value = stock_
                        End If
                    Next
                End If
            Catch ex As Exception
            End Try
        Next
        Bandeau_info_bas_hide()
    End Sub

    Private Sub affichage_manquants()
        Bandeau_info_bas_show("affichage manquants ...")
        For r = 0 To ChroniqueDataGridView.Rows.Count - 1
            Bandeau_info_bas_change_text("affichage manquants ... " & (r + 1).ToString & "/" & ChroniqueDataGridView.Rows.Count.ToString)
            Try
                If ChroniqueDataGridView.Item(Commande_Ref.Index, r).Value <> "" And ChroniqueDataGridView.Item(Manquant.Index, r).Value = "" Then
                    Try
                        Dim num_commande = CDec(ChroniqueDataGridView.Item(Commande_Ref.Index, r).Value)

                        Dim data = BDD.Commandes_LignesTableAdapter.GetDataBy_ref_commande_Code_Produit(num_commande, ChroniqueDataGridView.Item(Produit_EAN13.Index, r).Value)
                        If data.Rows.Count = 0 Then
                            data = BDD.Commandes_LignesTableAdapter.GetDataBy_ref_commande_Code_Produit(num_commande, ChroniqueDataGridView.Item(Produit_CAB.Index, r).Value)
                        End If
                        If data.Rows.Count = 0 Then
                            data = BDD.Commandes_LignesTableAdapter.GetDataBy_ref_commande_Code_Produit(num_commande, ChroniqueDataGridView.Item(Produit_CIP.Index, r).Value)
                        End If
                        If data.Rows.Count > 0 Then
                            If data.Item(0).livré_INDISPONIBILITE_N <> "" Then
                                ChroniqueDataGridView.Item(Manquant.Index, r).Value = data.Item(0).livré_INDISPONIBILITE_N
                                ChroniqueDataGridView.Item(Manquant.Index, r).Style.BackColor = Color.Orange
                            End If
                        End If
                    Catch ex As Exception
                    End Try
                End If
            Catch ex As Exception
            End Try
        Next
        Bandeau_info_bas_hide()
    End Sub
    Private Sub RadioButton1_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton1.CheckedChanged
        If RadioButton1.Checked Then
            à_commander = False
        Else
            à_commander = True
        End If
        affichage()
    End Sub


    Private Sub Date_CheckBox_CheckedChanged(sender As Object, e As EventArgs) Handles Date_CheckBox.CheckedChanged
        Tri_Date = Date_CheckBox.Checked
        affichage()
    End Sub

    Private Sub Tri_Patient_TextBox_KeyDown(sender As Object, e As KeyEventArgs) Handles Tri_Patient_TextBox.KeyDown
        If e.KeyCode = Keys.Enter Then
            Tri_Patient_TextBox_Validated(Nothing, Nothing)
        End If
    End Sub

    Private Sub Tri_Patient_TextBox_Validated(sender As Object, e As EventArgs) Handles Tri_Patient_TextBox.Validated
        Tri_Patient = Replace(Tri_Patient_TextBox.Text, " ", "%")
        affichage()
    End Sub

    Private Sub Tri_Produit_TextBox_KeyDown(sender As Object, e As KeyEventArgs) Handles Tri_Produit_TextBox.KeyDown
        If e.KeyCode = Keys.Enter Then
            Tri_Produit_TextBox_Validated(Nothing, Nothing)
        End If
    End Sub

    Private Sub Tri_Produit_TextBox_Validated(sender As Object, e As EventArgs) Handles Tri_Produit_TextBox.Validated
        Tri_Produit = Replace(Tri_Produit_TextBox.Text, " ", "%")
        affichage()
    End Sub

    Private Sub DateTimePicker1_ValueChanged(sender As Object, e As EventArgs) Handles DateTimePicker1.ValueChanged
        Date_CheckBox.Checked = True
        affichage()
    End Sub

    Private Sub LinkLabel1_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked
        MyMsg_Box.Presentation("Officine ?", "Voulez vous modifier la date de commande de tous les produits actuellement affichés ?" & vbCrLf & vbCrLf & "les produits à commander seront commandés le " & DateTimePicker2.Value.ToLongDateString, True, "Oui", True, "Non", False, "")
        If MyMsg_Box.ShowDialog = Windows.Forms.DialogResult.Yes Then
            For r = 0 To ChroniqueDataGridView.RowCount - 1
                If ChroniqueDataGridView.Item(Commande_Ref.Index, r).Value = "" Then
                    Me.ChroniqueTableAdapter.Update_DateCommande(CDate(DateTimePicker2.Value), ChroniqueDataGridView.Item(Vitale_Num.Index, r).Value, _
                                                                 ChroniqueDataGridView.Item(Produit_Désignation.Index, r).Value, ChroniqueDataGridView.Item(Produit_CIP.Index, r).Value, _
                                                                 ChroniqueDataGridView.Item(Produit_EAN13.Index, r).Value, ChroniqueDataGridView.Item(Produit_CAB.Index, r).Value)
                End If
            Next

        End If
    End Sub



    Private Sub Organismes_MyCombobox_TextChanged(sender As Object, e As EventArgs) Handles Organismes_MyCombobox.TextChanged
        Organisme = Organismes_MyCombobox.Text
        affichage()
    End Sub


    Private Sub SuiviTraitementList_SizeChanged(sender As Object, e As EventArgs) Handles Me.SizeChanged

        replace_controls()
    End Sub
    Private Sub replace_controls()
        ChroniqueDataGridView.Size = New Size(Me.Width - 40, Me.Height - 268)
        Tri_GroupBox.Location = New Point(12, Me.Height - 250)
        OK_Button.Location = New Point(Me.Width - 178, Me.Height - 200)
        Facturation_Button.Location = New Point(Me.Width - 278, Me.Height - 200)
        SuiviTraitement_Commandes_Button.Location = New Point(Me.Width - 378, Me.Height - 200)
        modif_date_commande_GroupBox1.Location = New Point(Me.Width - 701, Me.Height - 250)
    End Sub

    Private Sub Période_Patient_MyCombobox_TextChanged(sender As Object, e As EventArgs) Handles Période_Patient_MyCombobox.TextChanged
        Try
            If Période_Patient_MyCombobox.Text = "" Then
                Tri_Patient_période = 0
                Période_Patient_MyCombobox.BackColor = Color.White
            Else
                Tri_Patient_période = CInt(Période_Patient_MyCombobox.Text)
            End If
            affichage()
        Catch ex As Exception

        End Try
    End Sub

    Private Sub Période_Produit_MyCombobox_TextChanged(sender As Object, e As EventArgs) Handles Période_Produit_MyCombobox.TextChanged
        Try
            If Période_Produit_MyCombobox.Text = "" Then
                Tri_Produit_période = 0
                Période_Produit_MyCombobox.BackColor = Color.White
            Else
                Tri_Produit_période = CInt(Période_Produit_MyCombobox.Text)
            End If
            affichage()
        Catch ex As Exception

        End Try
    End Sub

    Private Sub LinkLabel2_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel2.LinkClicked
        affichage_nom()
    End Sub


    Private Sub LinkLabel3_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel3.LinkClicked
        Try
            If ChroniqueDataGridView.CurrentRow Is Nothing Then Exit Sub
            If ChroniqueDataGridView.CurrentRow.Index < 0 Then Exit Sub
            Dim my_Chronique_Remplacement_Produit As New Chronique_Remplacement_Produit
            my_Chronique_Remplacement_Produit.Vitale_Num = 0
            my_Chronique_Remplacement_Produit.Produit_CAB = ChroniqueDataGridView.Item(Produit_CAB.Index, ChroniqueDataGridView.CurrentRow.Index).Value
            my_Chronique_Remplacement_Produit.Produit_CIP = ChroniqueDataGridView.Item(Produit_CIP.Index, ChroniqueDataGridView.CurrentRow.Index).Value
            my_Chronique_Remplacement_Produit.Produit_Désignation = ChroniqueDataGridView.Item(Produit_Désignation.Index, ChroniqueDataGridView.CurrentRow.Index).Value
            my_Chronique_Remplacement_Produit.Produit_EAN13 = ChroniqueDataGridView.Item(Produit_EAN13.Index, ChroniqueDataGridView.CurrentRow.Index).Value
            my_Chronique_Remplacement_Produit.ShowDialog()
            affichage()
        Catch ex As Exception

        End Try
    End Sub



    Private Sub Période_Patient_MyCombobox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles Période_Patient_MyCombobox.SelectedIndexChanged

    End Sub

    Private Sub LinkLabel4_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel4.LinkClicked
        affichage_Stock()
    End Sub


    Private Sub ChroniqueDataGridView_CellPainting(ByVal sender As System.Object, _
        ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) _
        Handles ChroniqueDataGridView.CellPainting
        If e.RowIndex = -1 AndAlso e.ColumnIndex = suppr.Index Then

            e.Paint(e.CellBounds, DataGridViewPaintParts.All And Not DataGridViewPaintParts.ContentForeground)
            e.Graphics.DrawImage(My.Resources.see, e.CellBounds)
            e.Handled = True

        ElseIf e.RowIndex > -1 AndAlso e.ColumnIndex = suppr.Index Then
            'e.Paint(e.CellBounds, DataGridViewPaintParts.All And Not DataGridViewPaintParts.ContentForeground)
            e.Graphics.DrawImage(My.Resources.hide, e.CellBounds)
            e.Handled = True
        End If
    End Sub



    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Facturation_Button.Click
        MyMsg_Box.Presentation("Facturation Automatique", "Voulez-vous poursuivre la facturation ?", True, "Oui", True, "Non", False, "")
        If MyMsg_Box.ShowDialog = Windows.Forms.DialogResult.Yes Then
            Dim data = BDD.Produits_ReservésTableAdapter.GetData_Facturation_Auto(Tri_Produit, Tri_Patient, Organisme, Tri_Patient_période)
            Facture_Auto.list_Produits_Reservés = New List(Of PharmaDataSet.Produits_ReservésRow)
            For r = 0 To data.Rows.Count - 1
                Facture_Auto.list_Produits_Reservés.Add(data(r))
            Next
            Facture_Auto.Ordo_Type = "MEDICAMENT"
            Facture_Auto.Visible = True
        End If
   
    End Sub


    Private Sub Modif_periode_LinkLabel5_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles Modif_periode_LinkLabel5.LinkClicked

        If Not IsNumeric(Modif_periode_MyCombobox.Text) Then
            Modif_periode_MyCombobox.Text = "0"
        End If
        Dim période = BDD.Chronique_PériodeTableAdapter.GetDataBy_Id(Modif_periode_MyCombobox.Text).Item(0)
        Dim date_calculée As Date = DateAdd(DateInterval.Day, CDec(Modif_periode_DecJours_TextBox.Text), période.Date_prochaine_commande)
        Dim ret As System.Windows.Forms.DialogResult
        If Modif_periode_MyCombobox.Text = "0" Then
            ret = Windows.Forms.DialogResult.No
        Else
            MyMsg_Box.Presentation("Remplacement de période", "Choix de la Date de Commande :" & vbCrLf & vbCrLf & "La date calculée pour la prochaine commande de cette période est " _
                                 & vbCrLf & date_calculée.ToLongDateString & vbCrLf & vbCrLf & "(n'affecte pas les produits déja commandés)", True, "Dates calculées", True, "Conserver les dates", True, "Annuler")
            ret = MyMsg_Box.ShowDialog
            If ret = Windows.Forms.DialogResult.Cancel Then
                Exit Sub
            End If
        End If

        'MAJ des données dans Vitale et Chronique (se fait dans tous les cas except annulation par l'utilisateur)
        Dim num_vitale As New List(Of Integer)
        For r = 0 To ChroniqueDataGridView.RowCount - 1
            If Not num_vitale.Contains(CInt(ChroniqueDataGridView.Item(Vitale_Num.Index, r).Value)) Then
                num_vitale.Add(CInt(ChroniqueDataGridView.Item(Vitale_Num.Index, r).Value))
                BDD.VitaleTableAdapter.Update_Chronique_Periode(CInt(Modif_periode_MyCombobox.Text), CInt(ChroniqueDataGridView.Item(Vitale_Num.Index, r).Value))
                BDD.VitaleTableAdapter.Update_Chronique_Periode_decalage_jour(CInt(Modif_periode_DecJours_TextBox.Text), CInt(ChroniqueDataGridView.Item(Vitale_Num.Index, r).Value))
            End If
        Next 'fin MAJ des données Chronique dans Vitale

        For Each num As Integer In num_vitale
            Dim prod_chroniques = BDD.ChroniqueTableAdapter.GetDataBy_Vitale_Num_List(num)
            For r = 0 To prod_chroniques.Rows.Count - 1
                If ret = Windows.Forms.DialogResult.Yes And prod_chroniques.Item(r).Commande_Ref = "" Then
                    Me.ChroniqueTableAdapter.Update_Période_ID(CDec(Modif_periode_MyCombobox.Text), date_calculée, prod_chroniques.Item(r).Vitale_Num, prod_chroniques.Item(r).Produit_Désignation, prod_chroniques.Item(r).Produit_CIP, prod_chroniques.Item(r).Produit_EAN13, prod_chroniques.Item(r).Produit_CAB)
                Else
                    Me.ChroniqueTableAdapter.Update_Période_ID(CDec(Modif_periode_MyCombobox.Text), prod_chroniques.Item(r).Date_Commande_Produit, prod_chroniques.Item(r).Vitale_Num, prod_chroniques.Item(r).Produit_Désignation, prod_chroniques.Item(r).Produit_CIP, prod_chroniques.Item(r).Produit_EAN13, prod_chroniques.Item(r).Produit_CAB)
                End If
            Next

        Next
        affichage()

    End Sub

    Private Sub LinkLabel5_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel5.LinkClicked
        affichage_manquants()
    End Sub

    Private Sub LinkLabel6_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel6.LinkClicked
        LinkLabel2_LinkClicked(Nothing, Nothing)
        LinkLabel4_LinkClicked(Nothing, Nothing)
        LinkLabel5_LinkClicked(Nothing, Nothing)
    End Sub

    Private Sub ChroniqueDataGridView_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles ChroniqueDataGridView.CellContentClick

    End Sub
End Class